gpt4 book ai didi

django - 如何在不反转 Django 数据库中的对象值的情况下制作 obj.save()

转载 作者:行者123 更新时间:2023-12-04 15:08:52 26 4
gpt4 key购买 nike

我有递归函数,里面有 obj.save() 。如何防止每次迭代都从数据库查询?是 django transaction.atomic 做的。

最佳答案

如果您使用的是 django >= 2.2(自从我在 2020 年 1 月 5 日写这篇文章时 ALL other versions of django are 100% out of support 起,您应该使用它),您可以这样做:

objs = []
for obj in Entry.objects.filter(...):
if not obj.condition:
continue
obj.headline = 'something!!!'
obj.author = 'John Smith'
objs.append(obj)

with transaction.atomic():
Entry.objects.bulk_update(objs, ['headline', 'author'])

需要注意的几点:

  • 所有工作都在 transaction.atomic 之外完成
  • transaction.atomic 意味着如果该 block 内有任何失败,它将回滚整个工作(事务)并且不会保留其中的一部分。示例:您有 2 个作者要保存,第一个成功保存,第二个没有。因为在事务原子内部,这意味着它们都未提交。它与在一个查询中完成所有操作无关

更多信息可以在这里找到:https://docs.djangoproject.com/en/3.1/ref/models/querysets/#bulk-update

关于django - 如何在不反转 Django 数据库中的对象值的情况下制作 obj.save(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65577934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com