我想保存在模型的大型物体的数量,所以我决定用这种方式使用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)
...
提前致谢。
我相信,每一次你的代码返回相同的片,使您得到完整性错误,因为你已经插入的特定记录。当前代码是从相同的起始位置开始。尝试使用标准的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