我创建了一个例外
class MyOwnRollBack(Exception):
pass
仅能够回滚交易,而又不会将其引发到交易之外:
try:
with transaction.atomic():
# do stuff
raise MyOwnRollBack
except MyOwnRollBack:
pass
是否有例外,transaction.atomic()
不允许传播,类似于我编写的这段代码?
答案 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