本文介绍 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,它们对查询中使用的变量数量有限制。
相关用法
- Python Django QuerySet.bulk_create用法及代码示例
- Python Django QuerySet.select_related用法及代码示例
- Python Django QuerySet.union用法及代码示例
- Python Django QuerySet.latest用法及代码示例
- Python Django QuerySet.values用法及代码示例
- Python Django QuerySet.intersection用法及代码示例
- Python Django QuerySet.get用法及代码示例
- Python Django QuerySet.none用法及代码示例
- Python Django QuerySet.exclude用法及代码示例
- Python Django QuerySet.get_or_create用法及代码示例
- Python Django QuerySet.update_or_create用法及代码示例
- Python Django QuerySet.prefetch_related用法及代码示例
- Python Django QuerySet.first用法及代码示例
- Python Django QuerySet.annotate用法及代码示例
- Python Django QuerySet.dates用法及代码示例
- Python Django QuerySet.values_list用法及代码示例
- Python Django QuerySet.select_for_update用法及代码示例
- Python Django QuerySet.order_by用法及代码示例
- Python Django QuerySet.in_bulk用法及代码示例
- Python Django QuerySet.defer用法及代码示例
- Python Django QuerySet.aggregate用法及代码示例
- Python Django QuerySet.reverse用法及代码示例
- Python Django QuerySet.count用法及代码示例
- Python Django QuerySet.exists用法及代码示例
- Python Django QuerySet.explain用法及代码示例
注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.query.QuerySet.bulk_update。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。