我试图在模型中保存大量对象,所以我决定通过这种方式使用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)
...
谢谢。
答案 0 :(得分: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个元素(除了前100个元素)全部作为一个分片返回。在此处查看更多信息,https://docs.python.org/3.7/library/itertools.html#itertools.islice