使用cx_Oracle插入行并记录失败的行?

时间:2013-02-13 17:51:31

标签: python oracle cx-oracle

我要做的是使用cx_Oracle插入一堆行,如果有错误(即约束违规),请记录坏行。

这是sudo代码,我将如何使用execute来执行此操作,但这看起来效率不高。

for row in rows:
    try:
        cursor.execute("sql", row)
    except InsertError:
        badRecordCSVFile.write(row)

我读了docs,起初似乎executemany就像我在寻找的那样。但是,在阅读了这个thread之后,似乎executemany只是处理查询,直到它失败(不是我想要的)。

所以我的问题是插入行并记录失败的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您使用SQL参数作为插入语句,这是足够有效的;瓶颈将在与Oracle的网络通信中。

通过使用SQL参数,Oracle有机会准备查询计划,然后在每个插入上重复使用它。

但是,如果您计划在插入失败时回滚事务,则也可以使用.executemany()