Django:在循环中保存查询集项是否有效?

时间:2014-09-18 07:33:35

标签: python django django-models django-orm

获取查询集是否有效,并在传统循环中迭代它,使用save()保存对每个项目的更改? e.g。

for mod in mymodel.objects.all():

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

    # Save
    mod.save()

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

1 个答案:

答案 0 :(得分: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