我有一个很大的CSV文件,我导入到Django。目前,如果我的数学是正确的,它将在32小时内完成!可以加速吗?加速CSV更新/导入Django模型
我有一个CSV文件,约157,000行15列。我将它读入我的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()
的“作品”块是从“姓氏名字MIDDLE”取名字领域,使之成为“名字中姓”。
这将每月运行一次,用新员工更新数据库,并对现有员工记录进行任何更改。很多时候,现有记录不会改变,但任何一个(或多个)字段都可能会改变。是否有我可以添加的支票,花费更少的时间,然后在每条记录上拨打save()
?
目前,这需要每20个记录约15秒完成!有没有一种方法可以加速(大幅)?
UPDATE:
如果它的事项,该emp_id
是表的主键。没有员工具有与以前员工相同的身份(包括退休员工)。
你可能要添加的'@ commit_on_success'装饰,以避免数据库做每个'.save后隐式数据库提交()'。这可能会有所帮助。 (特别是在使用InnoDB的情况下。) – AKX 2013-04-10 19:47:38
另外''string.split'已被弃用了很长一段时间。尝试类似'pieces = tmpRecord.name.title()。split(); tmpRecord.name =“”.join((件[1],件[2],件[0]))'为Pythonic方法。 – AKX 2013-04-10 19:49:49
'@ commit_on_success'会放在函数'def'的上方吗? – 2013-04-10 20:10:21