【Django】如果使用transaction.atomic()来使用事务的情况下.

简而言之

Django默认情况下不使用事务(自动提交模式)。因此,我将介绍使用Django ORM提供的数据库事务。

使用transaction.atomic()的目的是什么?

在transaction.atomic()的代码块中,代码会在事务内部执行。也就是说,一系列数据库操作只有在全部成功后才会提交,如果在中途出现错误,则会进行回滚。

以转账程序作为常见例子来说,如果在转账过程中发生错误导致钱款未能到达对方,那将会非常麻烦。因此,可以利用事务来维护数据库的一致性。

如果使用这种方法(似乎是上下文管理器形式)进行实现,则按照基本用法进行。

from django.db import transaction

# トランザクションの開始
with transaction.atomic():
    # データベースへの操作を実行。このブロックはすべての操作が成功した場合にのみコミットされる!

我想自由地设置适用范围,所以我按照上述的方法进行了实施。但是,如果在settings.py的DATABASES中添加ATOMIC_REQUESTS,并指定为True,那么也可以进行批量设置。准确地说,它将作为Django的中间件运行,并控制每个HTTP请求的事务。这样一来,也可以将整个View函数的处理作为一个事务进行管理。但是,需要考虑到使用此方法时,自己创建的命令可能不会生效,以及性能可能在流量较大时变得低效的问题。

顺便一提,”atomic” 的意思是“不可分”。这个名字是用来表示想要将数据库操作变为原子操作的意思。

请参考

【Django】事务设置方法

广告
将在 10 秒后关闭
bannerAds