sql - 在 python 中使用 ibm_db_dbi sql 查询时出现参数错误
问题描述
我正在尝试将一个查询的结果用于另一个查询的 where 子句,但无法使其正常工作。目前我收到一个错误....
ProgrammingError: ibm_db_dbi::ProgrammingError: Exception('Statement Execute Failed: [IBM][CLI Driver] CLI0100E 参数数量错误。SQLSTATE=07001 SQLCODE=-99999')
我在下面的代码(最终,“结果”将只是分配给另一个查询结果的变量,但现在我只是想让它与静态变量一起使用。提前致谢!
import ibm_db_dbi as db
result = ['c80fS4Pn1', '9f*hzNT21']
conn = db.connect('DRIVER=DB2 zOS;'
'DATABASE=xxxx;'
'HOSTNAME=xxxx.com;'
'PORT=xxx;'
'PROTOCOL=xxxx;'
'UID=id;'
'PWD=passord;', '', '')
cur = conn.cursor()
sql = "SELECT * FROM SCHEMA.TABLE WHERE PRIM_KEY IN (?)"
cur.execute(sql, (result))
conn.close()
解决方案
您收到错误的原因CLI0100E
是因为在您的代码示例中您显示了一个包含两个条目的列表(称为result
),而在您的查询中只有一个参数标记(?)
要绑定的参数数量(由 完成cur.execute()
),必须与查询中的参数标记数量完全匹配
由于您通常不知道查询返回的行数,因此您通常不知道参数标记的数量。
您可以动态生成参数标记的数量以匹配上一个结果集中的行数。或者,您可以在没有参数标记的情况下完整生成 SQL 字符串,这是低效且可能无法扩展的。
在 SQL 中做 SQL 擅长的事情是明智的,例如将子查询的结果传递给另一个查询。尝试在客户端代码中(而不是在 SQL 引擎内部)执行此操作可能不优雅且缓慢。
推荐阅读
- virtual-machine - 无法在 Aion FastVM 中构建 Solidity 编译器
- python - ValueError:检查目标时出错:预期 conv2d_21 有 4 个维度,但得到了形状为 (26, 1) 的数组
- powershell - 即使执行策略是 RemoteSigned,为什么我还需要“Unblock-File”?
- html - 网格应该是水平的,但显示为垂直的
- python - 实现递归树函数以收集最高级别的节点
- ffmpeg - ffmpeg:连接图像和视频
- haskell - Haskell 中的非详尽功能模式
- javascript - 下载在我的第一个 html 网站中不起作用
- ubuntu - 我在 Ubuntu 18.04 中的命令行颜色有问题,我该如何解决?
- apache - XAMPP tomcat 服务未以错误启动,因为“Tomcat 启动/停止并出现错误,返回代码:1”