加速CSV更新/导入Django模型

时间:2013-04-10 19:16:37

标签: 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”块正在从“LASTNAME FIRSTNAME MIDDLE”获取名称字段,并将其转换为“Firstname Middle Lastname”。

这将每月运行一次,以便使用新员工以及对现有员工记录的任何更改来更新数据库。大多数情况下,现有记录不会改变,但任何一个(或多个)字段都可能发生变化。有没有我可以添加的支票,只需在每条记录上调用save()所花费的时间更少?

目前,每20条记录需要大约15秒才能完成!有没有办法可以加速(大幅度)?

更新

如果重要,emp_id是表的主键。没有员工拥有与之前员工相同的ID(包括退休员工)。

2 个答案:

答案 0 :(得分:2)

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

如果您在数据库中已经存在的数据出现问题。插入其他表,然后使用SQL查询修复您的问题。

答案 1 :(得分:1)

也许您可以使用python脚本来准备中间加载CSV,然后尝试进行加载操作?

http://dev.mysql.com/doc/refman/5.6/en/load-data.html