2016-03-20 63 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() 

希望这可能会有所帮助。 谢谢,

相关问题