Django的bulk_create IntegrityError(重复记录),带UUID primary_key

问题描述 投票:0回答:1

我想保存在模型的大型物体的数量,所以我决定用这种方式使用bulk_create:

while True:
    batch = list(islice(records, 100))
    if not batch:
        break
    models.Record.objects.bulk_create(batch, batch_size)

但是,我得到这个错误,当我添加了第二批100:

django.db.utils.IntegrityError: (1062, "Duplicate entry '165ab345f2ad47bbb2072ab7b3e8023f' for key 'PRIMARY'")

这是模型,如果它可以帮助你:

class Record(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    ...

提前致谢。

mysql django
1个回答
1
投票

我相信,每一次你的代码返回相同的片,使您得到完整性错误,因为你已经插入的特定记录。当前代码是从相同的起始位置开始。尝试使用标准的Python切片来代替。

record_list = []
for record in records:
    if len(record_list) % 100 == 0:
        models.Record.objects.bulk_create(record_list, len(record_list))
        record_list = []
    else:
        record_list.append(record)

islice文档,您目前的代码返回所有,但作为一个单一的切片您的记录第100个元素。查看更多在这里,https://docs.python.org/3.7/library/itertools.html#itertools.islice

© www.soinside.com 2019 - 2024. All rights reserved.