【问题标题】:Django bulk_create IntegrityError (Duplicate entry) with UUID primary_key带有 UUID 主键的 Django bulk_create IntegrityError(重复条目)
【发布时间】:2019-02-05 01:53:11
【问题描述】:

我正在尝试在模型中保存大量对象,因此我决定通过这种方式使用 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】:

    我相信您的代码每次都返回相同的切片,因此您会收到完整性错误,因为您已经插入了该特定记录。当前代码从相同的起始位置开始。尝试改用标准的 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

    【讨论】:

    • 天哪,我没想到...谢谢!
    猜你喜欢
    • 2020-04-13
    • 2012-07-23
    • 1970-01-01
    • 2011-11-11
    • 2013-01-06
    • 2020-04-01
    • 1970-01-01
    • 2018-03-18
    • 2012-09-09
    相关资源
    最近更新 更多