【问题标题】:Inserting rows using cx_Oracle and logging the ones that fail?使用 cx_Oracle 插入行并记录失败的行?
【发布时间】:2013-01-29 08:50:49
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: python oracle cx-oracle


【解决方案1】:

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

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

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

【讨论】:

  • SQL 参数是指INSERT INTO myTable (col1, col2) VALUES (:val1 :val2)?
  • @johnthexiii:是的,没错。
猜你喜欢
  • 2021-02-28
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
相关资源
最近更新 更多