本文介绍 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。