gpt4 book ai didi

python - Django MySQL - 将多个记录一起保存在数据库中

转载 作者:行者123 更新时间:2023-11-29 21:14:04 26 4
gpt4 key购买 nike

我正在尝试在 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 一次创建所有新记录。但现有记录仍会一次更新一项。

是否有另一种方法可以在数据库中一次保存/更新所有记录而不是针对每个记录?或者,如何优化此代码?

欢迎任何建议。

谢谢

最佳答案

通过创建一个包含所有需要更新的记录的新列表 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()

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

关于python - Django MySQL - 将多个记录一起保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com