我有一个小问题。我将一长串数据插入到数据库中,但某些新行可能会引发 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()
所以,研究了一下,我发现了这个:
http://docs.sqlalchemy.org/en/rel_0_7/orm/session.html#using-savepoint
for record in records:
try:
with session.begin_nested():
session.merge(record)
except:
print "Skipped record %s" % record
session.commit()
但是,如果“记录”是要插入的对象数组(在我的情况下是 Check_Point 实例),我无法真正让它工作。我收到以下错误:
此 Session 的事务已被嵌套的 rollback() 调用回滚。要开始一个新事务,首先发出 Session.rollback()
我接近解决问题,但需要一些帮助。
提前致谢!