psycopg2 - 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)
解决方案
第二个查询应该q_col_list = sql.SQL("*")
用作参数。
推荐阅读
- c# - 受密码保护的安装程序 .net
- angular - Angular http post如何附加文件和数据
- docker - 未正确设置HEROKU的CircleCI环境变量导致GIT失败
- javascript - 当用户关闭浏览器时检测Websocket关闭连接?
- git - git diff 用于任何存储库之外的自定义 2 文件?
- opengl - 在 OpenGL 中调配通道的最快方法是什么?
- azure - 静默访问令牌如何用于 azure b2c
- python - Pandas `index 0 is out of bounds for axis 0 with size 0`
- java - 如何解决Android studio 3.1.3 启动错误
- javascript - 如何分别制作 DBconnection 和 Node.js 查询文件