【发布时间】:2025-12-22 21:50:16
【问题描述】:
我在两个不同的数据库中有两个逻辑连接的实例。我希望它们都被保存或回滚。但是,如果我在外部块中引发异常 - 嵌套的 Transaction.atomic 不会回滚,但为什么呢?
来自文档:
atomic 块可以嵌套。在这种情况下,当一个内部块 成功完成,它的效果仍然可以回滚,如果 稍后会在外部块中引发异常。
def __commit_to_db(self, mesure, mdm_mesure):
try:
with transaction.atomic():
mesure.save()
with transaction.atomic(using='mdm'):
mdm_mesure.save()
raise Exception('oops')
except (KeyboardInterrupt, SystemExit):
raise
except BaseException as error:
MainLoger.log_error(error)
return
【问题讨论】:
-
对于数据库错误处理,您可以使用 Exception 而不是 BaseException。这是一种更好的做法来缩小可能的错误并仅处理这些错误。
标签: python django django-orm