@RD1706D

Почему при наличии пробелов в строке PostgreSQL выдаёт ошибку (Psycopg2, Python)?

Добрый день! При попытке записать данные в Postgre SQL выдаёт следующую ошибку:
psycopg2.errors.SyntaxError: syntax error at or near "Ronaldo"
LINE 7: ...                                VALUES (Cristiano Ronaldo, '...


Примечательно что она возникает только при наличии в строке пробелов без них, всё работает нормально, в чём может быть причина?

Мой код:
import psycopg2
with connection.cursor() as cursor:
        cursor.execute(
            f"""INSERT INTO data(photo_avatar,
                                 name,
                                 type,
                                 reach,
                                 engagemant_er,
                                 engage_percent)
                                 VALUES ({profile_name}, 'N\A', {reach}, {engagement}, {engage_per});"""
            )
        
    connection.commit()
  • Вопрос задан
  • 454 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Jack444
import psycopg2
E = lambda field: f'$myseckey${field}$myseckey$' if type(field) is str else field
with connection.cursor() as cursor:
        cursor.execute(
            f"""INSERT INTO data(photo_avatar,
                                 name,
                                 type,
                                 reach,
                                 engagemant_er,
                                 engage_percent)
                                 VALUES ({E(profile_name)}, 'N\A', {E(reach)}, {E(engagement)}, {E(engage_per));"""
            )
        
    connection.commit()
Ответ написан
Комментировать
nochkin
@nochkin
Ошибка потому что это некоректный запрос на SQL. Все строки должны быть в кавычках если там пробелы.
Но вообще все параметры надо передавать parameterized во избежании уязвимостей типа sql injection. То есть, вместо пераметров будут знаки "?", а сами значения будут передавать вторым параметров в вызове execute.
Что-то типа такого:
cursor.execute("insert into data(name, type) values (?,?)", (profile_name, "N/A"))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы