【问题标题】:Understanding atomic transactions in Django了解 Django 中的原子事务
【发布时间】:2015-10-12 08:59:48
【问题描述】:

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

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

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

一个。

@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>

乙。

 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>

【问题讨论】:

    标签: python django transactions atomic


    【解决方案1】:

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

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

    atomic 有什么好处?

    假设您要更新表单中的几个模型,atomic 装饰器将确保所有模型都得到更新,或者如果出现错误。一个都没有。

    效率更高吗?

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

    它是如何工作的?

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

    类似这样的:

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

    【讨论】:

      猜你喜欢
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2016-04-16
      • 2019-07-27
      相关资源
      最近更新 更多