一尘不染

Django bulk_create具有导致IntegrityError的忽略行?

django

我正在使用bulk_create将数千或行加载到Postgresql数据库中。不幸的是,某些行导致IntegrityError并停止了bulk_create进程。我想知道是否有一种方法告诉django忽略这些行并尽可能多地保存批处理?


阅读 878

收藏
2020-04-01

共1个答案

一尘不染

现在可以在Django 2.2上实现
Django 2.2 从文档中ignore_conflicts为该bulk_create方法添加了一个新选项:

在支持它的数据库上(除PostgreSQL <9.5和Oracle以外的所有数据库),将ignore_conflicts参数设置为True会告诉数据库忽略插入任何失败约束的行的失败,例如重复的唯一值。启用此参数将禁用在每个模型实例上设置主键(如果数据库正常支持的话)。

例:

Entry.objects.bulk_create([
    Entry(headline='This is a test'),
    Entry(headline='This is only a test'),
], ignore_conflicts=True)
2020-04-01