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

标签 python mysql django python-2.7

我正在尝试在 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/

相关文章:

python - 如何将多个图像插入博客文章而不是文件字段上传(Django 博客)

Python:使用 OptionParser 从命令行获取 2 个文件名

python - pandas cut(): how to convert nans?还是将输出转换为非分类?

python - 实例方法的装饰器

php - 在将安装在许多随机主机上的 PHP 软件中使用 MySQL 触发器是否安全

javascript - 使用javascript和django将文本文件上传到服务器中的某个文件夹

python - 是什么导致 symfit 出现此警告?

用于在 'IN (10,13,8,11,6,14,9,12,7,15)' 附近使用正确语法的 MySQL 服务器版本

java - Hibernate:如何设置整数字段的长度

python - 如何从 Django 请求获取 oauth2 客户端应用程序