@LevSvl08

Почему я получаю данную ошибку?

У меня есть следующий подготовленный запрос и его последующее извлечение
postgreSQL_select_Query = "UPDATE %s SET %s = %s WHERE %s = %s"
cursor.execute(postgreSQL_select_Query, (table,sql_attr,sql,id_attr,id,))

При извлечении я получаю такую ошибку:
psycopg.errors.SyntaxError: ошибка синтаксиса (примерное положение: "$1")
LINE 1: UPDATE $1 SET $2 = $3 WHERE $4 = $5

Не понимаю, почему ошибка выглядит так. С подстановкой только id работает.
Я практически уверен, что таблицу и атрибут нельзя сделать динамическими в запросе, но я не могу понять почему такая ошибка. Ведь даже значение не подставилось.

P.s библиотека используется следующая - psycopg
  • Вопрос задан
  • 372 просмотра
Решения вопроса 2
mayton2019
@mayton2019
Bigdata Engineer
Мне кажется ты смешал в кучу две разные технилогии. Bind variables. Это вставка специальных переменных
в тело DML/DQL запроса вместо значений. Это поддерживается на уровне БД. Это важно для БД потому что идет компилляция текста запроса для повторного его исполнения много раз.

И интерполяция строк. Это просто тупо генерация новой строки. К базам не имеет отношения.
Это поддерживается Python например. Строковой интепорляцией ты можешь сделать первую часть запроса.

Сделать нечто вроде
"UPDATE emp SET ename=? WHERE empid=?"
(кстати в синтаксисе у тебя скорее всего была ошибка)

И потом уже вместо вопросительных знаков добавить bind variables.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Да, таблицу и столбцы нельзя делать через подстановку. В чем именно ошибка непонятна?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@igor6130
Так вам в тексте ошибки все и объяснили.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы