2016-03-20 65 views
0

我想在Django MySQL中保存多個記錄。 我可以單獨保存每條記錄,但隨着數組大小的增加,它變得太慢。Django MySQL - 在數據庫中一起保存多個記錄

代碼:[更新]

def MultipleSave(array1, array2, key1, key2): 
    insert_list = [] 
    l = len(array1) 
    for i in range(0, l): 
     try: 
      str1 = array1[i] 
      str2 = array2[i] 

      try: 
       new_record = UserString.objects.filter(original=str1) 
       new_record = new_record[0] 

       setattr(new_record, key2, str2) 
       new_record.save() 
      except Exception as e:    
       new_record = UserString(original=str1) 

       setattr(new_record, key1, str1) 
       setattr(new_record, key2, str2) 
       insert_list.append(new_record) 

     except Exception as e: 
      print ('Exception occured: "%s"' % e) 

    if len(insert_list) > 0: 
     UserString.objects.bulk_create(insert_list) 

[更新]:這個更新的代碼現在使用一次bulk_create創建所有新記錄。但是現有記錄仍然每次更新一個。

是否有替代方法可以一次性保存/更新數據庫中的所有記錄而不是每個記錄?或者,此代碼如何優化?

歡迎任何建議。

感謝,

回答

0

這個問題得到了通過創建一個包含所有記錄的新名單update_list這需要進行更新,然後使用transaction.atomic()

更新的代碼[一氣呵成保存所有記錄解決工作] :(在Django 1.9)

def MultipleSave(array1, array2, key1, key2): 
    insert_list = [] 
    update_list = [] 
    l = len(array1) 
    for i in range(0, l): 
     try: 
      str1 = array1[i] 
      str2 = array2[i] 

      try: 
       new_record = UserString.objects.filter(original=str1) 
       new_record = new_record[0] 

       setattr(new_record, key2, str2) 
       update_list.append(new_record) 
      except Exception as e:    
       new_record = UserString(original=str1) 

       setattr(new_record, key1, str1) 
       setattr(new_record, key2, str2) 
       insert_list.append(new_record) 

     except Exception as e: 
      print ('Exception occured: "%s"' % e) 

    if len(insert_list) > 0: 
     UserString.objects.bulk_create(insert_list) 

    with transaction.atomic(): 
     for record in update_list: 
      record.save() 

希望這可能會有所幫助。 謝謝,

相關問題