Я пытаюсь выполнить запрос в форме:
SELECT {} from TABLE where foo = VALUE
Но я хочу иметь возможность предоставить список для замены {}
Согласно документам psycopg, чтобы сделать это безопасно, вам нужно использовать функцию sql.Identifier
, чтобы правильно экранировать параметр, а затем сделать что-то вроде этого:
SQL = sql.SQL(
"SELECT {} FROM foo WHERE bar = %s"
).format(identifier)
cursor.execute(SQL, [VALUE])
Это работает,когда identifier
является единственным элементом, но мне нужно, чтобы это было произвольное число. Например, если:
identifier = ["abc", "def"]
и
VALUE = 4
SQL = SELECT abc def FROM foo WHERE bar = 4
Я пытался запустить sql.Identifier(x)
для каждого члена identifier
, но это дало "abc""def"
, что явно не правильно.