Django 1.10 从 CSV 文件记录手动提交到数据库

Posted

技术标签:

【中文标题】Django 1.10 从 CSV 文件记录手动提交到数据库【英文标题】:Django 1.10 Manually Commit to Database from CSV file record 【发布时间】:2017-10-30 04:13:47 【问题描述】:

我需要将 7 天(即 7*24*11,000 条数据记录)的每小时温度数据加载到我的模型 11,000 个站点。我需要每天做两次。使用自动提交非常慢。我想在从每个站点加载数据后提交。我有两个模型类,Lake 和 Tempdat。代码的本质如下。感谢您提供的任何帮助。我一直在查看该站点上的 Django 文档和其他示例中的 atomic,但我需要更直接的说明(谢谢!)

with open('iowa.csv', 'r+') as lakefile:
    lakes = csv.reader(lakefile)
    for lake in lakes:
        gnis = lake[0]

        temp_dat_filename = "T"+str(gnis)+".txt"
        nameanddir=os.path.join(tempdatdir,str(temp_dat_filename))
        f = open(nameanddir, 'r+')
        c = Lake.objects.get(GNIS=gnis) #Lake is the Class name
        print(c)

        for line in f:
            list_of_line = line.rstrip().split()
            date_pieces = list_of_line[0].split('-')

            dateob = datetime.datetime(int(date_pieces[0]), int(date_pieces[1]), int(date_pieces[2]), int(list_of_line[1]), 0, 0)
            temperature = list_of_line[2]
            #NOTE: instead of commiting here for each record, I would to go through all the records (7days worth, then commit)
            c.tempdat_set.create(LakeTemp = temperature, ModelDate = dateob)`

【问题讨论】:

Django 不会为每条记录提交。 那么用命令:c.tempdat_set.create(LakeTemp = temperature, ModelDate = dateob),数据没有提交?我的理解是,对于过去的版本,您可以在保存或创建多个记录后提交。如果不是这种情况,有没有办法提高这个过程的速度 它看起来一点也不像 django 问题。这更像是你的算法。请发布您的模型和广告几个示例行 【参考方案1】:

你可以使用bulk_create,应该有帮助 -> https://docs.djangoproject.com/en/1.11/ref/models/querysets/#bulk-create

【讨论】:

谢谢。我了解 bulk_create 不会覆盖现有数据。我正在运行一个预测 7 天的连续模型,我想每 12 小时覆盖一次预测。如果是这样,还有其他想法吗?

以上是关于Django 1.10 从 CSV 文件记录手动提交到数据库的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.10 模板语法错误。您是不是忘记注册或加载此标签?

如何从 django 中可用的大量 csv 文件中选择一个 csv 文件

django 1.10以上版本,引入js

来自 HTML Django 1.10 中模型的图像

BASE_DIR 返回设置路径而不是项目路径(django 1.10)

Django 1.10 UUIDField 返回字符串或 UUID