【发布时间】:2025-12-30 13:35:06
【问题描述】:
我正在尝试将一个非常大的数据集批量插入到 MySQL 数据库中,并且希望在忽略重复错误的同时使用 django 的 bulk_create。
示例模型:
class MyModel(models.Model):
my_id=models.IntegerField(primary_key=True)
start_time = models.DateTimeField()
duration = models.IntegerField()
......
description = models.CharField(max_length=250)
到目前为止,我有以下代码(我所有模型的通用代码,我传入了 Model_instance() 和 [list of bulk_create objects]):
def insert_many(model, my_objects):
# list of ids where pk is unique
in_db_ids = model.__class__.objects.values_list(model.__class__._meta.pk.name)
if not in_db_ids:
# nothing exists, save time and bulk_create
model.__class__.objects.bulk_create(my_objects)
else:
in_db_ids_list = [elem[0] for elem in in_db_ids]
to_insert=[]
for elem in my_objects:
if not elem.pk in in_db_ids_list:
to_insert.append(elem)
if to_insert:
model.__class__.objects.bulk_create(to_insert)
django 有没有办法这样做以避免重复?模仿 MySQL 的 insert ignore 会很棒。如果我只是使用bulk_create(非常快),如果主键重复并且插入停止,我会收到错误消息。
【问题讨论】:
-
看看 [Django bulk_create with ignore rows that cause IntegrityError?][1] or [MySQL INSERT … ON DUPLICATE KEY UPDATE with django 1.4 for bulk insert][2] [1]: @ 987654321@[2]:*.com/questions/12916880/…
标签: python mysql django bulkinsert bulk