2012-10-13 38 views
0

表看起來是這樣的:如何更新多行?

status1 status2 status3 element 
    0   1   2  music1 
... 

我的腳本提取幾十萬行的這個樣子,做一些處理他們,然後寫回的新狀態。問題是,如果我逐一更新這些行,如下所示:

UPDATE music_table 
    SET status1 = '10', 
     status2 = '20, 
     status3 = 30 
WHERE element = 'music1'; 

完成所有操作需要花費很長時間。 (超過1.5小時!!)

所以問題是,如何在同一時間更新多行或甚至可能?

+1

是否http://stackoverflow.com/questions/2838790/efficient-update-of-sqlite-table-with-many-records有幫助? – Blair

+0

可以一次更新多行。但這取決於與其他桌子的關係。你有其他桌子與上表有關係嗎? – naota

+0

@Blair:從未想過它可能就是這麼簡單。非常感謝!! – Shane

回答

0

如果每次更新一行,在element列上有一個索引可以更快地找到該行。

然而,也有可能同時更新多個行,如果你能做到的新狀態的計算在SQL表達式:

UPDATE music_table SET status1 = status1 + 1 

(這改變了所有行的狀態;您。仍然可以使用WHERE限制更新一些行)

如果計算比較複雜,你可以註冊一個用戶定義函數

from pysqlite2 import dbapi2 as sqlite3 

def compute_status1(a, b, c): 
    return a + b + len(c) 

db = sqlite3.connect(...) 
db.create_function("compute_status1", 3, compute_status1) 
cur = db.cursor() 
cur.execute('UPDATE music_table SET status1 = compute_status1(status2, status3, element)') 
cur.close()