Как использовать bulk_create в пакетах (is_slice) и избежать дублирования ошибок PK - PullRequest
0 голосов
/ 15 апреля 2020

Я использую bulk_create, создаю несколько записей из ajax json POST.

. В документах указывается следующее:

Если Вы хотите вставлять объекты в пакетах без одновременной оценки всего генератора, вы можете использовать эту технику, если у объектов нет установленных первичных ключей вручную

Это дает следующий пример:

from itertools import islice

batch_size = 100
objs = (Entry(headline='Test %s' % i) for i in range(1000))
while True:
    batch = list(islice(objs, batch_size))
    if not batch:
        break
    Entry.objects.bulk_create(batch, batch_size)

Однако, когда я запускаю этот точный код, я получаю уникальную ошибку ограничения первичного ключа:

django.db.utils.IntegrityError: duplicate key value violates unique constraint 'entry_pkey'

Это происходит потому, что код бесконечно циклично перебирает один и тот же набор объектов (while True) и не перемещает начальные и конечные значения islice по списку. Документы не так? Я неверно истолковал код / ​​это может быть что-то еще, что я здесь упускаю?

Я использую PostgreSQL.

...