使用ibm_db

时间:2019-09-16 21:22:25

标签: python python-3.x pandas db2

在执行代码时,将插入总记录的近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

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并使用了 Tad 的代码,但我使用了 None 而不是“No Value”。它将那些空“值”插入到 DB2 表中。

df = df.where((pd.notnull(df)), None)

答案 1 :(得分:0)

我试图加载到DB2表的数据框具有'nan'值。 我已将其替换为“无价值”。此后有效。

df = df.where((pd.notnull(df)),'无值')