我正在将数据数组插入 SQLite 数据库,但有时某些行会引发 IntegrityError 异常。当我回滚时,所有以前的行也会被删除。我想回滚到之前的状态并继续下一个插入。
import sqlalchemy as alc
def insert(self, specs):
#do stuff to transfor specs in data_db
entry = Check_Point(data_db)
session.add(entry)
try:
session.flush()
except alc.exc.IntegrityError:
print 'int Error'
session.rollback()
我找到了这个。
for record in records:
try:
with session.begin_nested():
session.merge(record)
except:
print "Skipped record %s" % record
session.commit()
如果
records
是一个对象数组(Check_Point
的实例),我无法让它工作:
此会话的事务已通过嵌套的 rollback() 调用回滚。 要开始新事务,请先发出 Session.rollback()
目前,由于
PySQLite错误,
SAVEPOINT
事务无法与 SQLAlchemy 和 SQLite3 正常工作。请参阅此 SQLAlchemy Google 小组帖子,了解 Michael Bayer 在 SQLAlchemy 中关于该错误以及解决该错误的复杂性的详细说明。
我推荐 sqlalchemy
session.commit()
。