【发布时间】:2009-08-25 19:38:02
【问题描述】:
我正在使用带有 Postgres 后端的 SQLAlchemy 来进行批量插入或更新。为了提高性能,我尝试每千行左右只提交一次:
trans = engine.begin()
for i, rec in enumerate(records):
if i % 1000 == 0:
trans.commit()
trans = engine.begin()
try:
inserter.execute(...)
except sa.exceptions.SQLError:
my_table.update(...).execute()
trans.commit()
但是,这不起作用。似乎当 INSERT 失败时,它会使事情处于一种奇怪的状态,从而阻止了 UPDATE 的发生。它会自动回滚事务吗?如果是这样,这可以停止吗?我不希望我的整个事务在出现问题时回滚,这就是我首先尝试捕获异常的原因。
顺便说一句,我收到的错误消息是“sqlalchemy.exc.InternalError: (InternalError) 当前事务被中止,命令被忽略直到事务块结束”,它发生在 update().execute()打电话。
【问题讨论】:
标签: python sqlalchemy