Как передать список столбцов или * (все столбцы) в динамический SQL-запрос с помощью psycopg2.sql - PullRequest
2 голосов
/ 02 апреля 2019

Я использую psycopg2.sql для динамического создания строк запроса.

Я хочу иметь возможность динамически передавать либо список столбцов, либо * (для всех столбцов) в одну и ту же строку запроса SELECT.

Это работает для списка столбцов:

qry = sql.SQL('SELECT {} FROM {}.{}').format(
    sql.SQL(",").join(map(sql.Identifier, ["col1","col2"])),
    sql.Identifier('schema'),
    sql.Identifier('table'))

Но это не работает при попытке выбрать все столбцы:

qry = sql.SQL('SELECT {} FROM {}.{}').format(
    sql.Identifier('*')),
    sql.Identifier('schema'),
    sql.Identifier('table'))

Я получаю сообщение об ошибке: «DatabaseError: Ошибка выполнения на sql… столбец« * »не существует»

1 Ответ

0 голосов
/ 03 апреля 2019

sql.Identifier('*') генерирует "*":

SELECT "*" FROM "schema"."table"

Используйте базовый SQL Composable :

qry = sql.SQL('SELECT {} FROM {}.{}').format(
    sql.SQL('*'),
    sql.Identifier('schema'),
    sql.Identifier('table'))

чтобы получить

SELECT * FROM "schema"."table"
...