當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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