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

问题描述 投票:2回答:1

我正在使用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 ...列上执行失败”*“不存在”

python postgresql psycopg2
1个回答
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"
© www.soinside.com 2019 - 2024. All rights reserved.