我正在尝试在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 :(得分: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()
希望这可能会有所帮助。 谢谢,