Python sqlalchemy - 独立交易

时间:2017-05-10 06:33:40

标签: python sqlalchemy

我对flask-sqlalchemy中的交易有疑问。

def funca():
    instance = MyModel.query.get(5)

    try:
        instance.some_field = 'test'
        instance.do_something()
        instance.do_something_other() # Let's pretend that this causes exception
        db.session.commit()
     except Exception:
        db.session.rollback()

# My model method
def do_something(self):
    external_id = self.make_request_to_external_service()
    self.external_id = external_id

# My model method
def do_something_other(self):
    external_details = self.make_another_external_request()
    self.external_details = external_details

我现在如何实现,在Exception上,这只会回滚some_fieldexternal_details更改而external_id仍保存在db中?

我可以使用嵌套事务,还是可以为这3个操作手动启动独立事务?

这里的问题是do_something将获得external_id并且必须保存在db中,因为我不能第二次执行此操作,如果我不回滚此事务{{1}将导致我的数据库和外部服务之间的不同步。

对于这个例子的目的,我们假装在some_field之前不能do_something,因为我可以运行它并独立提交,但我不能在我的真实应用程序中这样做。

0 个答案:

没有答案