本文介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。