【发布时间】:2012-05-14 15:04:08
【问题描述】:
我将几条 10k 记录插入到具有 REF 完整性规则的数据库中。不幸的是,一些数据行是重复的(因为它们已经存在于数据库中)。在插入之前检查数据库中每一行的存在成本太高了,所以我打算继续处理 SQLAlchemy 抛出的 IntegrityError 异常,记录错误然后继续。
我的代码将如下所示:
# establish connection to db etc.
tbl = obtain_binding_to_sqlalchemy_orm()
datarows = load_rows_to_import()
try:
conn.execute(tbl.insert(), datarows)
except IntegrityError as ie:
# eat error and keep going
except Exception as e:
# do something else
我在上面所做的(隐式)假设是 SQLAlchemy 没有将多个插入滚动到一个事务中。如果我的假设是错误的,那么这意味着如果发生 IntegrityError,则插入的其余部分将被中止。任何人都可以确认上面的伪代码“模式”是否会按预期工作 - 或者我是否会因抛出 IntegrityError 异常而最终丢失数据?
另外,如果有人对此有更好的想法,我会很感兴趣。
【问题讨论】:
标签: python sqlalchemy