这个问题已经被报告了here,你可以看看那里的评论。在
错误的原因是,在第一批处理中,一个或多个要绑定的列始终是None,但在随后的批处理中,这些列中的一个列现在有一个值。在cx_Oracle源代码中已经更正了这一点,因此您可以自行构建,也可以等待补丁发布。在
否则,目前的解决方案如下:
(1)在一批中执行所有插入操作(但根据大小,这可能无法使用)
(2)为每个批创建一个新的游标(以便cx嫒Oracle计算每个批的类型)
(3)使用cursor.setinputsizes()指定类型和尺寸(可能很麻烦)
演示问题的简单测试用例如下:import cx_Oracle
conn = cx_Oracle.connect("cx_Oracle/welcome")
cursor = conn.cursor()
cursor.execute("truncate table TestTempTable")
sql = "insert into TestTempTable values (:1, :2)"
cursor.executemany(sql, [(1, None), (2, None)])
cursor.executemany(sql, [(3, None), (4, "Testing")])