我正在尝试从Upsert到db2 z/os。这是我的查询语句的简短副本。
-- sql
MERGE INTO SampleSchema.? as T
USING (VALUES (?,?,?,?,?)) S(A, B, C, D, E)
on T.A = S.A
WHEN MATCHED THEN
UPDATE SET
T.B = ?,
T.C = ?,
T.D = ?
T.E = ?
WHEN NOT MATCHED THEN
INSERT (T.A, T.B, T.C, T.D, T.E)
VALUES (S.A, S.B, S.C, S.D, S.E)我的python代码是,
import pandas as pd
'''
df looks like,
A B C D E
1 a1 b1 c1 d1 e1
2 a2 b2 c2 d2 e2
.....
100000 a10000 ... ... ... ....
'''
import ibm_db
conn = ibm_db.connect("database", "username", "password")
stmt = ibm_db.prepare(conn, sql) # sql is from the above sql statement
table = "sampleTable"
for _, row in df.iterrows():
ibm_db.bind_param(stmt, table, row["A"], row["B"], row["C"], row["D"], row["E"], row["B"], row["C"], row["D"], row["E"])
ibm_db.execute(stmt)但是,我得到了这个错误
TypeError: function takes at most 8 arguments (11 given)我怎样才能传递超过8个论点?还是可以传递字典类型?(它有许多重复的变量,我认为可以减少一些变量)
提前感谢!
发布于 2021-01-15 16:04:40
该错误建议检查预期的参数。让我们看一看param的函数定义
bool ibm_db.bind_param (IBM_DBStatement stmt, int parameter-number, string variable
[, int parameter-type [, int data-type [, int precision [, int scale [, int size]]]]] )parameter-number.标识的bind_param用于将值绑定到单个参数。如果有更多的参数,则需要多次调用bind_param。下面是链接文档中的这样一个示例:
sql_stmt = "insert into tabmany values(?,?)"
stmt = ibm_db.prepare(conn, sql_stmt)
id = 3
name = "Sam"
ibm_db.bind_param(stmt, 1, id)
ibm_db.bind_param(stmt, 2, name)https://stackoverflow.com/questions/65739122
复制相似问题