3

我有一个小问题。我将一长串数据插入到数据库中,但某些新行可能会引发 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()

我接近解决问题,但需要一些帮助。

提前致谢!

4

1 回答 1

2

由于PySQLite错误,目前SAVEPOINT事务无法与SQLAlchemySQLite3一起正常工作。请参阅此 SQLAlchemy Google 小组帖子,了解 Michael Bayer 关于该错误的详细说明以及在SQLAlchemy中解决该问题的复杂性。

于 2012-10-27T05:14:55.303 回答