Tôi đang cố gắng chèn số lượng lớn vào một db MySQL cho một tập dữ liệu rất lớn và rất thích sử dụng django's bulk_create
trong khi bỏ qua các lỗi trùng lặp.django số lượng lớn tạo ra bỏ qua trùng lặp
mô hình mẫu:
class MyModel(models.Model):
my_id=models.IntegerField(primary_key=True)
start_time = models.DateTimeField()
duration = models.IntegerField()
......
description = models.CharField(max_length=250)
cho đến nay tôi đã đoạn mã sau (chung cho tất cả các mô hình của tôi, tôi vượt qua trong một Model_instance() và [danh sách các đối tượng bulk_create]):
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)
Có cách nào trong django làm điều này để tránh trùng lặp? bắt chướccủa MySQL sẽ rất tuyệt. Nếu tôi chỉ đơn giản sử dụng bulk_create
(rất nhanh), tôi gặp lỗi nếu có một khóa chính trùng lặp và chèn dừng lại.
Hãy nhìn vào [Django bulk_create với bỏ qua hàng gây IntegrityError?] [1] hoặc [MySQL INSERT ... ON DUPLICATE CẬP NHẬT KEY với django 1,4 cho số lượng lớn chèn] [2] [1]: http://stackoverflow.com/questions/12451053/django-bulk-create-with-ignore-rows-that-cause-integrityerror [2]: http: // stackoverflow.co m/câu hỏi/12916880/mysql-insert-on-duplicate-key-cập nhật-với-django-1-4-cho-số lượng lớn-chèn –