首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将值插入数据库花费的时间太长

将值插入数据库花费的时间太长
EN

Stack Overflow用户
提问于 2019-12-25 13:17:34
回答 1查看 56关注 0票数 1

我正在从Django的upload formviews.py接收数据,并将其保存到数据库(MongoDB)。但是数据量太大,需要耗费大量的时间和CPU。我找到了为什么花了这么长时间,但我不能通过其他方式发送这些数据...这是我的代码

代码语言:javascript
运行
复制
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发送,如下所示

代码语言:javascript
运行
复制
    item = {      
             "顧客CD" : int(column[0]),
             .....
            }
items.append(item)

因此,我可以避免每次都调用kokyaku -它使处理速度更快,但我的模型不能接收这种格式的数据……我能做些什么?如果可能的话,我想使用bulk_create来让它更快…这是我的models.py

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-12-25 13:59:34

更好的做法是在for循环中一个接一个地插入,您可以从csv文件中创建一个条目列表,并一次性插入所有条目

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59475427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档