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つ以上の引数を渡すにはどうすればよいですか?または辞書タイプを渡すことは可能ですか?(変数の数を減らすことができると思う多くの繰り返し変数があります)
前もって感謝します!
エラーは、どのパラメーターが予期されているかを確認することを示唆しています。ibm_db.bind_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]]]]] )
bind_paramは、parameter-numberで識別される単一のパラメーターに値をバインドすることを目的としています。より多くのパラメーターがある場合は、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)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加