python - 将值插入数据库需要太长时间

标签 python django python-3.x

我在 Django 中接收从上传表单views.py的数据,并将其保存到数据库 (MongoDB)。但数据量太大,需要大量的时间和CPU。我找到了为什么需要这么长时间,但我无法通过其他方式发送这些数据...... 这是我的代码

csv_file = request.FILES["csv_file"]
file_type = request.POST.get("type", "")
file_data = csv_file.read().decode("utf-8")
    if file_type == "val3":
        lines = file_data.split("\n")
        items = []
        item = ""
        for line in lines:
            column = line.split(',')
            try:
                item = kokyaku(        # HERE I'm calling `kokyaku` model every time
                顧客CD = int(column[0]),
                顧客補助CD = int(column[1]),
                顧客名称s=str(column[2]),
                顧客名称=str(column[3]),
                顧客名称カナ=str(column[4]),
                法人名称=str(column[5]),
                代表者名称=str(column[6]),
                住所=str(column[7]),
                電話番号=str(int(column[8])),
                地区名称=str(column[9]),
                データマッチ用電話番号=int(column[10]),
                契約状態=str(column[11])
                )
                items.append(item)

            except Exception as e:
                print(e)

        kokyaku.objects.bulk_create(items)

我每次循环都调用 kokyaku 模型,所以它非常慢...我尝试将其作为 dictslist 发送> 像这样

    item = {      
             "顧客CD" : int(column[0]),
             .....
            }
items.append(item)

这样我就可以避免每次调用kokyaku - 它使处理速度更快,但我的模型无法接收这种格式的数据...我能做什么?如果可能的话,我想使用 bulk_create 来使其更快...... 这是我的 models.py

class kokyaku(models.Model):
    顧客CD = models.IntegerField(blank=True)
    顧客補助CD = models.IntegerField(blank=True)
    顧客名称s = models.TextField(blank=True)
    顧客名称 = models.TextField(blank=True)
    顧客名称カナ = models.TextField(blank=True)
    法人名称 = models.CharField(max_length=15, blank=True)
    代表者名称 = models.CharField(max_length=15, blank=True)
    住所 = models.TextField(blank=True)
    地区名称 = models.TextField(blank=True)
    電話番号 = models.IntegerField(blank=True)
    データマッチ用電話番号 = models.IntegerField(blank=True)
    契約状態 = models.CharField(max_length=2, blank=True)

    def __str__(self):
        string = str(self.顧客CD) + " - " + self.顧客名称
        return string

最佳答案

最好不要在 for 循环中逐一插入,您可以从 csv 文件创建一个项目列表并一次插入所有项目

关于python - 将值插入数据库需要太长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475427/

相关文章:

python - 根据 django Rest Framework 中的身份验证方法使用不同的序列化器

python - 仅在使用 python3 时实例化 Elasticsearch 客户端失败

python - Python中出现太多索引错误

django - 在 Django Rest Framework 中将数据作为数组发布

python - Django 在模板中获取用户时区

python-3.x - 大叶 map 未在 Spyder 中显示

Python,如何处理 "ValueError: unsupported pickle protocol: 4"错误?

python - 在 Django 中开始的事务

python - 如何使用字符串获取 python 的平均值?

python - 在 Python 中删除列表的第一个元素