是否有例外会回滚Django原子事务而不传播?

时间:2018-11-16 15:32:48

标签: django

我创建了一个例外

class MyOwnRollBack(Exception):
    pass

仅能够回滚交易,而又不会将其引发到交易之外:

try:
    with transaction.atomic():
         # do stuff
         raise MyOwnRollBack
except MyOwnRollBack:
    pass

是否有例外,transaction.atomic()不允许传播,类似于我编写的这段代码?

1 个答案:

答案 0 :(得分:0)

  

是否有例外,transaction.atomic()不允许传播,类似于我编写的这段代码?

从技术上讲,是的,但是出于所有实际目的,不是。

IntegrityErrors将逃脱

try:
    with transaction.atomic():
        generate_relationships()
except IntegrityError:
    handle_exception()

但是一旦您进入handle_exception(),交易已经 已回滚。即使未回滚,也不允许您在回滚完成之前运行数据库语句(将引发TransactionManagmentError)。

您可能会找到手动处理交易的解决方案,请查看文档https://docs.djangoproject.com/en/2.1/topics/db/transactions/#transactions