当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django QuerySet.bulk_update用法及代码示例


本文介绍 django.db.models.query.QuerySet.bulk_update 的用法。

声明

bulk_update(objs, fields, batch_size=None)

此方法有效地更新提供的模型实例上的给定字段,通常使用一次查询,并返回更新的对象数:

>>> objs = [
...    Entry.objects.create(headline='Entry 1'),
...    Entry.objects.create(headline='Entry 2'),
... ]
>>> objs[0].headline = 'This is entry 1'
>>> objs[1].headline = 'This is entry 2'
>>> Entry.objects.bulk_update(objs, ['headline'])
2
在 Django 4.0 中更改:

添加了更新对象数量的返回值。

QuerySet.update() 用于保存更改,因此这比遍历模型列表并在每个模型上调用 save() 更有效,但它有一些警告:

  • 您无法更新模型的主键。
  • 不调用每个模型的save()方法,不发送 pre_save post_save 信号。
  • 如果更新大量行中的大量列,生成的 SQL 可能会非常大。通过指定合适的 batch_size 来避免这种情况。
  • 更新在multi-table 继承祖先上定义的字段将导致每个祖先的额外查询。
  • 当单个批次包含重复项时,只有该批次中的第一个实例会导致更新。
  • 函数返回的更新对象数量可能少于传入的对象数量。这可能是由于传入的重复对象在同一批次或竞争条件中更新,从而导致数据库中不再存在对象。

batch_size 参数控制在单个查询中保存多少对象。默认是一批更新所有对象,除了 SQLite 和 Oracle,它们对查询中使用的变量数量有限制。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.query.QuerySet.bulk_update。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。