如何“回滚到”“保存点”?

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

我正在将数据数组插入 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()

python sqlite sqlalchemy transactions rollback
2个回答
2
投票

目前,由于

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


-2
投票

我推荐 sqlalchemy

session.commit()

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