首页 > 解决方案 > psycopg2 - 对带有 sql 组合的 select 语句使用通配符?

问题描述

是否可以使用 SQL 组合来适应带有 psycopg2 的动态“SELECT *”语句?这是针对 Postgres 11.6 数据库的。

q_col_list我的代码从 shell 执行,并且使用 argparse 用户可以提供从 SELECT 查询返回的列名。如果不指定q_col_list默认设置为'*'。

是否有必要并且可以使用 SQL 组合来容纳“SELECT *”语句?

现在我有一个简单的 if 语句来检查q_col_list. 如果q_col_list指定为“*”,它将运行一个手动定义的“SELECT *”查询。否则它会运行一个表示变量的不同查询q_col_list。这显示在下面的代码段中:

  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

解决方案


第二个查询应该q_col_list = sql.SQL("*")用作参数。


推荐阅读