我正在尝试更新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>
答案 0 :(得分:6)
在这种情况下使用原子事务是个好主意吗?
不,atomic
装饰器确保在事务中执行全部或不执行更新。在这种情况下,它可能完全没用。
atomic
有什么好处?
假设您正在从表单更新一些模型,atomic
装饰器将确保所有模型都得到更新,或者是否有错误。完全没有。
效率更高吗?
不,绝对没有。这是一个数据安全的事情,它实际上效率低于常规更新,因为它需要为每个块创建一个事务。它如何运作?
在数据库中进行更新,而不是获取结果并将其写回,只需让数据库为您增加结果。
这样的事情:
from django.db.models import F
SomeModel.objects.filter(pk=123).update(some_field=F('some_field') + 1)