首页 > 解决方案 > 在 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()

标签: sqlpython-3.xdb2

解决方案


您收到错误的原因CLI0100E是因为在您的代码示例中您显示了一个包含两个条目的列表(称为result),而在您的查询中只有一个参数标记(?)

要绑定的参数数量(由 完成cur.execute()),必须与查询中的参数标记数量完全匹配

由于您通常不知道查询返回的行数,因此您通常不知道参数标记的数量。

您可以动态生成参数标记的数量以匹配上一个结果集中的行数。或者,您可以在没有参数标记的情况下完整生成 SQL 字符串,这是低效且可能无法扩展的。

在 SQL 中做 SQL 擅长的事情是明智的,例如将子查询的结果传递给另一个查询。尝试在客户端代码中(而不是在 SQL 引擎内部)执行此操作可能不优雅且缓慢。


推荐阅读