我有一個小問題。我將一長串數據插入到數據庫中,但可能會發生一些新行引發IntegrityError異常。這很好,我可以輕鬆識別它們。問題是,當我回滾撤銷這個「假」插入時,所有以前的行也被刪除。sqlalchemy回滾插入
然後我想要做的就是回滾到前一個狀態並繼續下一個插入。
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的情況下)。我收到以下錯誤:
This Session's transaction has been rolled back by a nested rollback() call. To begin a new transaction, issue Session.rollback() first
我接近解決問題,但需要一些幫助。
在此先感謝!
您正在使用哪種數據庫引擎?它支持'SAVEPOINT'交易嗎? –
嗨,它是一個SQLite3數據庫。它支持Savepoint。 http://www.sqlite.org/lang_savepoint.html 我可以通過嘗試提交每一個新行,但速度非常慢(每次需要插入大約3000行) 謝謝! – bgusach
我做了一些測試,似乎有關於SAVEPOINT和SQLite3的問題。我在SQLAlchemy Group上發佈了帖子,當我有這個澄清時會回覆給您。 –