1

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

这是我将如何使用执行执行此操作的 sudo 代码,但这似乎不是很有效。

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

我阅读了文档,起初似乎executemany是我想要的。但是,在阅读了这个线程之后,executemany 似乎只是处理查询直到它失败(不是我想要的)。

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

4

1 回答 1

1

如果你在插入语句中使用 SQL 参数,这就足够高效了;瓶颈将在与 Oracle 的网络通信中。

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

但是,如果您打算在插入失败时回滚事务,则最好使用.executemany().

于 2013-02-13T17:53:47.150 回答