【问题标题】:Transaction atomic needed for bulk create?批量创建所需的事务原子?
【发布时间】:2020-06-02 18:22:00
【问题描述】:

我正在使用 Django 的 bulk_create 方法一次创建多个条目。

为了确保只有在没有异常的情况下才提交更改,我正在考虑将transaction.atomic() 添加到代码块中,但我不确定是否需要添加它。

据我了解,我只需要在场景 2 中添加它,因为在这种情况下我要执行多个查询。

场景 1

在一个查询中创建 1.000 个条目

Entry.objects.bulk_create([
    Entry(headline='This is a test'),
    Entry(headline='This is only a test'),
    # ...
])

场景 2

分批创建 10.000 个条目

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

【问题讨论】:

    标签: python django database


    【解决方案1】:

    不,这两种情况都不需要。根据Django source code,对于bulk_create,使用原子事务将是多余的,因为该方法已经使用原子事务。

    【讨论】:

    • 是的......“事务在这样的场景中很重要”,是的,“因此,Django 已经为你做了这些。” (“锁定效率”比本身“回滚”更需要事务。)
    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多