0
我有一個操作,需要使用一定數量的子模型創建父模型。如果任何這些實例的創建失敗,則需要取消整個事件。如果發生錯誤,父級模型及其子級應該在數據庫中存在而不是。交易失敗後回滾
的代碼,我有:
transaction = db.engine.connect().begin()
try:
parent = ParentModel()
db.session.add(parent)
db.session.commit()
child = ChildModel(parent_id=parent.id)
db.session.add(child)
db.session.commit()
# An error occurs. We need to rollback the saved parent model.
raise HTTPException() # from werkzeug
except:
transaction.rollback()
transaction.commit()
我的測試:
def test(self):
# call the above operation
ParentModel.query.filter_by(id=1).first() # returns the parent model
要回滾你的事務,你可以使用'transaction.rollback()'。 – dirn
@dirn'rollback'不會刪除以前保存的模型。我已經使用當前的設置更新了操作。 –
問題是你在會話中調用'commit'。 「交易」和「會話」是兩個不同的會話。你在試圖築巢它們嗎? – dirn