有没有一个异常会在不传播的情况下回滚Django原子事务



我创建了一个异常

class MyOwnRollBack(Exception):
pass

只能回滚事务而不会将其引发到事务之外:

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

有没有一个例外transaction.atomic()不会让传播,类似于我写的这段代码?

是否存在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

最新更新