批量创建需要事务的原子性吗?

10
我正在使用 Django 的 bulk_create 方法一次创建多个条目。
为了确保只有在没有异常的情况下才提交更改,我考虑将transaction.atomic()添加到代码块中,但我不确定是否需要添加它。
据我理解,只有在场景 2中才需要添加,因为在这种情况下,我执行了多个查询。 场景 1 在一个查询中创建 1000 个条目。
Entry.objects.bulk_create([
    Entry(headline='This is a test'),
    Entry(headline='This is only a test'),
    # ...
])

场景2

批量创建10000个记录,每批次为1000个。

Entry.objects.bulk_create([
    Entry(headline='This is a test'),
    Entry(headline='This is only a test'),
    # ...
], batch_size=1_000)
1个回答

15

不需要,无论哪种情况都不需要。根据Django源代码,对于bulk_create使用事务原子性会是多余的,因为该方法已经使用了原子事务。


是的,“事务在这种情况下很重要”,而且,“因此,Django已经为您处理了它们。”(事务更需要用于“锁定效率”而不是“回滚”本身。) - Mike Robinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接