【问题标题】:Django: Is it efficient to save queryset items in loop?Django:在循环中保存查询集项目是否有效?
【发布时间】:2014-11-12 10:44:43
【问题描述】:

获取查询集并在常规循环中对其进行迭代并使用save() 保存对每个项目的更改是否有效?例如

for mod in mymodel.objects.all():

    # modify
    mod.name = 'new name or whatever'

    # Save
    mod.save()

如果没有,有没有更好的方法?文档指出调用save() 会命中数据库,这就是我问的原因。我是 Django(和 Python)的相对新手。在实际情况下,我不会遍历整个数据库。

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    效率不高,但有时您必须这样做。但是,您可以使用.update(),尤其是如果您要输入的值相同,或者有一种简单的方法可以预测它们

    所以对于你的例子:MyModel.objects.all().update(name='new name'),这不会循环整个表,它几乎可以转换为UPDATE my_model SET name = 'new name'

    您也可以在过滤器之后进行多次更新,参考:https://docs.djangoproject.com/en/1.7/topics/db/queries/#updating-multiple-objects-at-once

    【讨论】:

    • 实际上我的示例暗示我想要相同的值,但实际上情况并非如此。我认为您已经回答了这个问题,但在我的实际情况中,这是不可避免的,因为如果尝试的操作(发送电子邮件)成功,我想为每个项目说明。
    猜你喜欢
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2021-05-15
    • 2021-01-05
    • 2014-02-14
    • 2010-11-17
    相关资源
    最近更新 更多