INSERTS 中的 sqlalchemy 回滚

问题描述 投票:0回答:2

我有一个小问题。我正在将一长串数据插入数据库,但某些新行可能会引发 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 的实例),我无法真正让它工作。我收到以下错误:

此会话的事务已通过嵌套的 rollback() 调用回滚。 要开始新事务,请先发出 Session.rollback()

我即将解决问题,但需要一些帮助。

提前致谢!

python sqlite sqlalchemy rollback
2个回答
2
投票

目前,由于

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


0
投票

您尝试过 sqlalchemy session.commit() 吗?

© www.soinside.com 2019 - 2024. All rights reserved.