курсор psycopg2.execute () передает в переменные имена таблиц и элементы


Я пытался получить определенную группу объектов из определенной таблицы в базе данных postgres с помощью psycopg2. все советы, которые я видел по передаче переменных курсору.команда execute (SQL), похоже, не работает с двумя типами переменных

Это было то, что я устал первым, что не сработало:

SQL = 'SELECT * FROM %s WHERE created_on < date (%s);'
cursor.execute(SQL,[(table_name), (time_from)])

Это всегда возвращало синтаксическую ошибку, где было вставлено table_name

2 4

2 ответа:

Как упоминалось в комментарии Антуана, документация теперь предлагает этот метод для составления имен таблиц.

from psycopg2 import sql

cur.execute(
sql.SQL("insert into {} values (%s, %s)")
    .format(sql.Identifier('my_table')),
[10, 20])

Это было мое решение:

SQL1 = 'SELECT * FROM %s' %table_name
SQL2 = SQL1+' WHERE created_on < date (%s);'
cursor.execute(SQL2, (time_from, ))

Имена таблиц не могут быть переданы обычным способом, так как они преобразуются в объект в команде SQL