在 python 中使用 ibm_db_dbi sql 查询时获取参数错误
Getting parameters error when using ibm_db_dbi sql query in python
我试图将一个查询的结果用于另一个查询的 where 子句,但无法使其正常工作。目前我收到一个错误....
ProgrammingError: ibm_db_dbi::ProgrammingError: Exception('Statement Execute Failed: [IBM][CLI Driver] CLI0100E Wrong number of parameters. SQLSTATE=07001 SQLCODE=-99999')
我下面的代码(最终,'result' 将只是一个分配给另一个查询结果的变量,但现在我只是想让它与静态变量一起工作。提前致谢!
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
的原因是因为在您的 code-sample 中您显示了一个包含两个条目的列表(称为 result
),而在您的查询中只有一个 parameter-marker(?)
要绑定的参数数量(由 cur.execute()
完成),必须与查询中 parameter-marker 的数量完全匹配
由于您通常事先不知道查询返回的行数,因此您通常不知道提前 parameter-marker 的数量。
您可以动态生成参数标记的数量以匹配前面 result-set 中的行数。或者,您可以在没有参数标记的情况下完整生成 SQL 字符串,这样效率低下并且可能无法缩放。
在 SQL 中做 SQL 擅长的事情是明智的,例如将 sub-query 的结果传递给另一个查询。尝试在客户端代码中(而不是在 SQL 引擎中)这样做可能既不优雅又缓慢。
我试图将一个查询的结果用于另一个查询的 where 子句,但无法使其正常工作。目前我收到一个错误....
ProgrammingError: ibm_db_dbi::ProgrammingError: Exception('Statement Execute Failed: [IBM][CLI Driver] CLI0100E Wrong number of parameters. SQLSTATE=07001 SQLCODE=-99999')
我下面的代码(最终,'result' 将只是一个分配给另一个查询结果的变量,但现在我只是想让它与静态变量一起工作。提前致谢!
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
的原因是因为在您的 code-sample 中您显示了一个包含两个条目的列表(称为 result
),而在您的查询中只有一个 parameter-marker(?)
要绑定的参数数量(由 cur.execute()
完成),必须与查询中 parameter-marker 的数量完全匹配
由于您通常事先不知道查询返回的行数,因此您通常不知道提前 parameter-marker 的数量。
您可以动态生成参数标记的数量以匹配前面 result-set 中的行数。或者,您可以在没有参数标记的情况下完整生成 SQL 字符串,这样效率低下并且可能无法缩放。
在 SQL 中做 SQL 擅长的事情是明智的,例如将 sub-query 的结果传递给另一个查询。尝试在客户端代码中(而不是在 SQL 引擎中)这样做可能既不优雅又缓慢。