有谁知道SQLAlchemy中的SQL"INSERT OR REPLACE"子句及其SQL表达式语言的等价物是什么?
非常感谢 - honzas
我正在使用带有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()
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.似乎当INSERT失败时,它会使事物处于一种奇怪的状态,阻止UPDATE发生.它会自动回滚交易吗?如果是这样,可以停止吗?我不希望在发生问题时回滚整个事务,这就是为什么我首先尝试捕获异常.
我得到的错误消息BTW是"sqlalchemy.exc.InternalError:(InternalError)当前事务被中止,命令被忽略直到事务块结束",并且它发生在update().execute()调用上.