我有一個很大的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