django 的 bulk_create 是原子的吗?

Posted

技术标签:

【中文标题】django 的 bulk_create 是原子的吗?【英文标题】:Is django's bulk_create atomic? 【发布时间】:2020-12-03 02:12:17 【问题描述】:

如果在 django 中使用 bulk_create() 批量创建对象时出现任何失败,Django 会回滚更改吗?还是我应该明确使用transaction.atomic()

我的模型中有外键引用,可能不存在于数据库中。

我使用的是 Django 1.11

【问题讨论】:

这在文档中没有指定。所以我认为你必须在它周围放置自己的事务原子才能产生这种效果。 【参考方案1】:

bulk_create() 如果没有设置 batch_size 则生成单个查询(除了 SQLite,其中 batch 为 999)

仅当您设置了 batch_size 并且您希望所有以前的批次都被还原时,您才应该执行 transaction.atomic() 块

【讨论】:

以上是关于django 的 bulk_create 是原子的吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取使用 django bulk_create 创建的对象的主键

Django插入多条数据—bulk_create

Django的bulk_create()可以外键吗?

Django bulk_create 忽略导致 IntegrityError 的行?

Django model中数据批量导入bulk_create()

从 django bulk_create 中选择/查询对象?