使用cx_Oracle插入行并记录那些失败的行?
我想要做的是使用cx_Oracle插入一堆行,如果有错误(即违反约束),则记录错误的行。使用cx_Oracle插入行并记录那些失败的行?
下面是我如何使用execute执行的sudo代码,但这看起来效率不高。
for row in rows:
try:
cursor.execute("sql", row)
except InsertError:
badRecordCSVFile.write(row)
我看docs,起初它似乎像executemany就是我一直在寻找。然而,看完这个thread它似乎executemany只是处理查询,直到它失败(不是我想要的)。
所以我的问题是插入行并记录失败的最佳方式是什么?
如果您为插入语句使用SQL参数,则此效率足够高;瓶颈将在与Oracle的网络通信中。
通过使用SQL参数,Oracle有机会准备一个查询计划,然后在每个插入中重复使用它。
但是,如果您计划在插入失败时回滚事务,则最好使用.executemany()
。
? – John 2013-02-13 17:55:45
@johnthexiii:是的,确切的。 – 2013-02-13 17:56:50
[DML错误日志记录]可能有所帮助。你的意思是INSERT INTO myTable(col1,col2)VALUES(:val1:val2)'SQL参数的 – 2013-02-14 06:51:31