如何使用psycopg2.sql将列列表或*(所有列)传递给动态SQL查询

时间:2019-04-02 13:48:56

标签: python postgresql psycopg2

我正在使用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 :(得分:0)

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"