2013-06-26 7 views
15

मैं थोक के लिए कोशिश कर रहा हूँ की अनदेखी एक बहुत बड़े डेटासेट के लिए एक MySQL डाटाबेस में सम्मिलित बना सकते हैं और डुप्लिकेट त्रुटियों को अनदेखा करते हुए Django के bulk_create उपयोग करने के लिए अच्छा लगेगा।Django थोक डुप्लिकेट

नमूना मॉडल:

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 (में पारित) और [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) 

वहाँ आदेश डुप्लिकेट से बचने के लिए ऐसा करने का Django में कोई तरीका है? MySQL के insert ignore नकल उतार बहुत अच्छा होगा। अगर मैं बस bulk_create (बहुत तेजी से) का उपयोग करें, मैं एक त्रुटि एक प्राथमिक कुंजी डुप्लिकेट है और सम्मिलन बंद हो जाता है, तो मिलता है।

+2

पर एक नज़र डालें [पंक्तियों IntegrityError कारण उपेक्षा के साथ Django bulk_create?] [1] या [MySQL सम्मिलित करें ... पर थोक डालने के लिए Django 1.4 के साथ नकली चाबी अद्यतन] [2] [1]: http://stackoverflow.com/questions/12451053/django-bulk-create-with-ignore-rows-that-cause-integrityerror [2]: http: // stackoverflow.co एम/प्रश्न/12916880/mysql-डालने-ऑन-डुप्लिकेट कुंजी अद्यतन-साथ-Django-1-4 के लिए थोक डालने –

उत्तर

4

संभव यह नहीं है? मुझे यकीन है कि अगर मैं कटा हुआ सूची सही तरीके से उपयोग, लेकिन यह मेरी समझ है कि यह आप एक सूची है कि एक पाश में चालाकी से किया जा रहा है को संदर्भित करने की अनुमति देता है था नहीं हूँ।

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 and not elem.pk in to_insert[:]: 
       to_insert[:].append(elem) 
     if to_insert: 
      model.__class__.objects.bulk_create(to_insert) 
संबंधित मुद्दे