【问题标题】:psycopg2 - Use wildcard for select statement with sql composition?psycopg2 - 对带有 sql 组合的 select 语句使用通配符?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      相关资源
      最近更新 更多