@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)
  • Вопрос задан
  • 1202 просмотра
Пригласить эксперта
Ответы на вопрос 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().
Ответ написан
Ваш ответ на вопрос

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

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