本文介紹 django.db.models.query.QuerySet.bulk_create
的用法。
聲明
bulk_create(objs, batch_size=None, ignore_conflicts=False)
此方法以有效的方式將提供的對象列表插入數據庫(通常隻有 1 個查詢,無論有多少對象),並以列表的形式返回創建的對象,與提供的順序相同:
>>> objs = Entry.objects.bulk_create([
... Entry(headline='This is a test'),
... Entry(headline='This is only a test'),
... ])
不過,這有一些警告:
-
不會調用模型的
save()
方法,也不會發送pre_save
和post_save
信號。 -
它不適用於multi-table 繼承方案中的子模型。
-
如果模型的主鍵是
AutoField
-
它不適用於多對多關係。
-
它將
objs
轉換為一個列表,如果它是一個生成器,它會完全評估objs
。強製轉換允許檢查所有對象,以便可以首先插入具有手動設置主鍵的任何對象。如果您想批量插入對象而不立即評估整個生成器,則可以使用此技術,隻要對象沒有任何手動設置的主鍵:from itertools import islice batch_size = 100 objs = (Entry(headline='Test %s' % i) for i in range(1000)) while True: batch = list(islice(objs, batch_size)) if not batch: break Entry.objects.bulk_create(batch, batch_size)
batch_size
參數控製在單個查詢中創建的對象數量。默認是在一批中創建所有對象,除了 SQLite,默認情況下每個查詢最多使用 999 個變量。
在支持它的數據庫上(除 Oracle 之外的所有數據庫),將 ignore_conflicts
參數設置為 True
會告訴數據庫忽略插入失敗的任何行的失敗,例如重複唯一值。啟用此參數將禁用在每個模型實例上設置主鍵(如果數據庫通常支持它)。
警告
在 MySQL 和 MariaDB 上,將 ignore_conflicts
參數設置為 True
會將某些類型的錯誤(重複鍵除外)變為警告。即使使用嚴格模式。例如:無效值或不可為空的違規。有關詳細信息,請參閱MySQL documentation 和MariaDB documentation。
添加了對 SQLite 3.35+ 上獲取主鍵屬性的支持。
相關用法
- Python Django QuerySet.bulk_update用法及代碼示例
- 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_create。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。