【发布时间】:2019-12-05 01:58:32
【问题描述】:
是否可以使用 SQL 组合来适应带有 psycopg2 的动态“SELECT *”语句?这是针对 Postgres 11.6 数据库的。
我的代码从 shell 执行,并且使用 argparse 用户可以提供列名 q_col_list 以从 SELECT 查询返回。如果他们没有指定q_col_list,则默认设置为'*'。
是否有必要并且可以利用 SQL 组合来容纳 'SELECT *' 语句?
现在我有一个简单的 if 语句来检查 q_col_list 的值。如果q_col_list 被指定为“*”,它将运行一个手动定义的“SELECT *”查询。否则它会运行一个不同的查询来表达变量q_col_list。这在下面的 sn-p 中显示:
if q_col_list == '*':
cursor_query = sql.SQL("""SELECT * from {q_tab_name} WHERE {q_where_col} LIKE {q_wherel_str}""").format(
q_tab_name=sql.Identifier(q_tab_name),
q_where_col=sql.Identifier(q_where_col),
q_wherel_str=sql.Literal(q_wherel_str),
)
else:
cursor_query = sql.SQL("""SELECT {q_col_list} from {q_tab_name} WHERE {q_where_col} LIKE {q_wherel_str}""").format(
q_col_list = sql.Identifier(q_col_list),
q_tab_name = sql.Identifier(q_tab_name),
q_where_col = sql.Identifier(q_where_col),
q_wherel_str = sql.Literal(q_wherel_str),
)
cursor.execute(cursor_query)
【问题讨论】:
标签: psycopg2