一尘不染

如何使用Django批量更新?

django

我想用Django更新表格-原始SQL中的内容如下:

update tbl_name set name = 'foo' where name = 'bar'

我的第一个结果是这样的-但这很讨厌,不是吗?

list = ModelClass.objects.filter(name = 'bar')
for obj in list:
    obj.name = 'foo'
    obj.save()

有没有更优雅的方式?


阅读 1419

收藏
2020-03-27

共1个答案

一尘不染

UPD Django 2.2版本现在具有bulk_update。

请参阅以下django文档部分

一次更新多个对象

简而言之,你应该可以使用:

ModelClass.objects.filter(name='bar').update(name="foo")

你还可以使用F对象来执行诸如增加行数之类的操作:

from django.db.models import F
Entry.objects.all().update(n_pingbacks=F('n_pingbacks') + 1)

请参阅文档:https : //docs.djangoproject.com/en/1.9/topics/db/queries/

但是,请注意:

  • 这不会使用ModelClass.save方法(因此,如果你内部有逻辑,则不会被触发)。
  • 没有Django信号将被发射。
  • 你无法.update()在切片的QuerySet上执行,而必须在原始QuerySet上执行,因此你需要依靠.filter()and .exclude()方法。
2020-03-27