我寫了一個Python代碼,它從sqlite數據庫迭代讀取數據,對它進行一些計算並將結果作爲新列等寫回到數據庫。但是,涉及通過更新列來寫入數據庫的部分感覺會逐漸變慢和變慢。有沒有其他辦法可以做到同樣的事情,但速度更快?使sqlite3列更新更快
我的代碼的相關部分被帶到下面。在代碼的這一部分中,創建了兩個新列column_I1_和column_I2_,每列都以迭代編號結尾,如column_I1_1,column_I2_1,然後將新結果從相應列表寫入這些列。問題是,考慮到大量的迭代和計算耗時的性質,再加上大量的行(這裏由num值定義,大約11000行),這個工作太慢...
Is there另一種方式,而不是使用更新?因爲我認爲對於更新,每次添加新值時都必須複製該列,這會導致速度減慢。我曾經爲此使用Excel,並且速度更快,但由於電子表格有256列限制,我不得不切換到數據庫。
cur.execute("alter table C add column_I1_%d integer"%iter) #makes a new column indexed by iteration number
con.commit()
for e in range(0,num): # num is a given number as input
cur.execute("UPDATE C SET column_I1_%d=? WHERE Id=%d"%(iter,e+1),(w[e],)) # w is a list containing some results
con.commit()
#
cur.execute("alter table C add column_I2_%d integer"%iter)
con.commit()
for f in range(num,(2*num)):
cur.execute("UPDATE C SET column_I2_%d=? WHERE Id=%d"%(iter,f-num+1),(w[f],))
con.commit()
.....
您的意見是非常讚賞。另外,我是一個相對Python新手,所以請容易對我! :)
你嘗試過'cur.executemany'嗎?這可能會更快... –
@JoranBeasley它更快,但差異非常小。我檢查了每個更新,如果在一個循環中需要15秒,在excutemany形式中它需要14.8秒。總比沒有好,但仍然太多。而奇怪的是,隨着仿真的進行以及數據庫中現有列的數量的增加,它會減慢很多。雖然它寫了相同的行數,但是在迭代13中爲例如相同的操作需要1分鐘而不是15秒。我還沒有完全明白如何降低成本... – user3643087
你有沒有索引?有一些主鍵嗎? –