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