Транзакционные атомы c нужны для массового создания? - PullRequest
1 голос
/ 18 февраля 2020

Я использую метод bulk_create из Django для одновременного создания нескольких записей.

Чтобы гарантировать, что изменения будут зафиксированы только в том случае, если нет исключения I ' Я думаю о добавлении transaction.atomic() к блокам кода, но я не уверен, нужно ли мне его добавлять.

Насколько я понимаю, мне нужно добавить его только в Сценарий 2 , потому что в этом случае я выполняю более одного запроса.

Сценарий 1

Создание 1000 записей в одном запросе

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

Сценарий 2

Создание 10.000 записей в партиях по 1.000

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

1 Ответ

1 голос
/ 18 февраля 2020

Нет, вам не нужно ни для одного сценария. Согласно исходному коду Django , использование атома транзакции c будет избыточным для bulk_create, поскольку этот метод уже использует транзакции атома c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...