@butroskali

Параметризация sql запроса psycopg2, как передать содержимое двух переменных в тело запроса?

Необходимо передать 2 переменные в тело запроса sql
Официальная документация гласит что параметры через переменную передаются следующим образом, но это работает только с одним параметром:
SQL = "INSERT INTO authors (name) VALUES (%s);" # Note: no quotes
data = ("O'Reilly", )
cur.execute(SQL, data)

каким образом возможно было бы передать две переменные, то есть как то так:
SQL = "INSERT INTO authors (%s) VALUES (%s);" 
data_1 = ("name",)
data_2 = ("O'Reilly", )
cur.execute(SQL, data_1,data_2)
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
@galaxy
Именно так, как вы написали, нельзя. Можно так:

Only query values should be bound via this method: it shouldn’t be used to merge table or field names to the query (Psycopg will try quoting the table name as a string value, generating invalid SQL). If you need to generate dynamically SQL queries (for instance choosing dynamically a table name) you can use the facilities provided by the psycopg2.sql module:

>>> cur.execute("INSERT INTO %s VALUES (%s)", ('numbers', 10))  # WRONG
>>> cur.execute(                                                # correct
...     SQL("INSERT INTO {} VALUES (%s)").format(Identifier('numbers')),
...     (10,))



впрочем, это не сильно по сути отличается от str.format().
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
БАРС Груп Москва
от 250 000 до 300 000 ₽
ENJOY PRO Санкт-Петербург
от 140 000 до 180 000 ₽
ai.people Санкт-Петербург
от 150 000 до 250 000 ₽