python - 加速 CSV 更新/导入 Django 模型

标签 python mysql django csv django-models

我有一个大型 CSV 文件,我正在将其导入 Django。目前,如果我的计算正确,将在 32 小时内完成!是否可以加快速度?

我有一个包含约 157,000 行和 15 列的 CSV 文件。我正在将其读入我的 Django 模型并将其保存到 MySQL 数据库中。神奇的地方就在这里:

reader = csv.reader(csvFile, delimiter=',', quotechar='"')
for row in reader:
    tmpRecord = Employee(
        emp_id = row[0], # Primary Key
        name = row[1],
        # snipped for brevity; other columns assigned
        group_abbr = row[14]
    )

    pieces = string.split(tmpRecord.name.title(), " ")
    newName = pieces[1]
    try:
        newName += " " + pieces[2]
    except IndexError:
        pass
    newName += " " + pieces[0]
    tmpRecord.name = newName

    tmpRecord.save()

“pieces” block 从“LASTNAME FIRSTNAME MIDDLE”获取名称字段并将其转换为“Firstname Middle Lastname”。

这将大约每月运行一次,以使用新员工和对现有员工记录的任何更改更新数据库。大多数时候,现有记录不会更改,但任何一个(或多个)字段可能会更改。有没有我可以添加的检查,它比在每条记录上调用 save() 花费的时间更少?

目前,每 20 条记录大约需要 15 秒才能完成!有什么方法可以(显着)加快速度吗?

更新:

如果重要的话,emp_id 是表的主键。任何员工都不会拥有与前任员工相同的 ID(包括退休员工)。

最佳答案

我认为 bulk_create 会对你有所帮助 https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create

如果您对已经存在于数据库中的数据有疑问。插入其他表,然后使用 SQL 查询解决您的问题。

关于python - 加速 CSV 更新/导入 Django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15934482/

相关文章:

python - '_sre.SRE_Match' 对象不可订阅

python - 撤消绑定(bind)选项卡以自动完成

mysql - Grafana图形查询显示1点但有多个结果

php - mysql:从两个表中获取数据取决于第一个表的id和json中的结果

mysql - 列名中的非 ASCII 字符 - 一个坏主意?

python - 返回 groupby pandas 之后的所有行(即不是减少的行数,这是组键的唯一值)

python - 两个列表的最大乘积和

mysql - 如果记录存在获取现有列,比较它然后进行更新或者插入新记录

django - OSError at/[Errno 2]没有这样的文件或目录django Assets

sql - Django:来自两个模型的多个计数