了解 Django 中的原子事务

Understanding atomic transactions in Django

我正在尝试更新 django 1.8.4 中的两个 IntegerField,所以我决定使用原子事务,但我有一些疑问:

1- 在这种情况下使用原子事务是个好主意吗?使用它的真正好处是什么?效率高多少?

2- 我如何检查这两个部分是否相同?

A.

@transaction.atomic
class LinkManager(models.Manager):
    def vote_up(self, pk, increment=True):
        if increment:
            <update field 1, incrementing by 1>
        else:
            <update field 1, decrementing by 1>

B.

 class LinkManager(models.Manager):
        def vote_up(self, pk, increment=True):
            if increment:
                with transaction.atomic():
                    <update field 1, incrementing by 1>
            else:
                with transaction.atomic():
                    <update field 1, decrementing by 1>

在这种情况下使用原子事务是个好主意吗?

不,atomic 装饰器确保在事务中执行所有更新或不执行更新。在这种情况下它可能完全没用。

atomic有什么好处?

假设您正在更新表单中的一些模型,atomic 装饰器将确保所有模型都得到更新,或者如果出现错误。 None 完全没有。

效率更高吗?

不,绝对不是。这是一个数据安全问题,它实际上比常规更新效率低且速度慢,因为它需要为每个块创建一个事务。

它是如何工作的?

在数据库中更新,而不是获取结果并将其写回,而只是让数据库为您增加它。

像这样:

from django.db.models import F
SomeModel.objects.filter(pk=123).update(some_field=F('some_field') + 1)