在执行代码时,将插入总记录的近50%。突然,程序由于提到的错误而停止
代码:
conn = ibm_db.connect('DRIVER={IBM DB2 DRIVER};DATABASE=DEV;HOSTNAME=cloud.ibm.com;PORT=30000;PROTOCOL=TCPIP;UID=userid;pwd=password','','')
conni = ibm_db_dbi.Connection(conn)
subset = df[['col1', 'col2', 'col3', 'col4', 'col5',
'col6', 'col7', 'col8', 'col9']]
tuple_of_tuples = tuple([tuple(x) for x in subset.values])
load_db2_sql = "INSERT INTO edw.DETAILS VALUES(?,?,?,?,?,?,?,?,?)"
stmt = ibm_db.prepare(conn, load_db2_sql)
ibm_db.execute_many(stmt, tuple_of_tuples)
错误:
错误1064:值参数数组3386与 先前的参数数组
SQLCODE = -302 BM] [CLI驱动程序] [DB2 / LINUXX8664] SQL0302N a的值 EXECUTE或OPEN语句中的主机变量超出其范围 相应的用途。 SQLSTATE = 22001
答案 0 :(得分:1)
我遇到了同样的问题并使用了 Tad 的代码,但我使用了 None 而不是“No Value”。它将那些空“值”插入到 DB2 表中。
df = df.where((pd.notnull(df)), None)
答案 1 :(得分:0)
我试图加载到DB2表的数据框具有'nan'值。 我已将其替换为“无价值”。此后有效。
df = df.where((pd.notnull(df)),'无值')