2016-11-25 57 views
0

我有一個大表(table1,列namekeyinfo)與〜1,000,000行上,我需要執行以下操作:在sqlite3的表中的行有效地執行Python代碼

  1. 選中所有行其中infoNull""
  2. 在Python 3,其將執行轉換函數nameinfo(姑且稱之爲conversion(name)
  3. 更新的行與新info

什麼是執行此更新的最快方法?有沒有可以激活以提高性能的SQLite3設置?

我目前的研究已表明與SQLite3的庫中的以下內容:

cursor = db.cursor() 
cursor.execute('SELECT longkey, name FROM table1 WHERE info IS NULL or info = "";') 
rows = cursor.fetchall() 
items = [] 
for row in rows: 
    # Convert name to info 
    info = conversion(row[1]) 
    items.append(info,row[0]) 
cursor.executemany('UPDATE table1 SET info = ? WHERE longkey = ?;',items) 

這個問題當然是列表rows這是巨大的,非常內存密集型的創建。

我考慮過多個遊標,但是這個seems to not be a good solution

編輯:正在使用connection.create_function(name, num_params, func)一個可能的解決方案呢?

我該如何優化這個過程,使其變得快速而不是過於內存密集?

回答

1

當你直接從SQLite的調用函數,該行通過一個更新的一個:

db.create_function('conversion', 1, conversion) 
cursor.execute("UPDATE table1 SET info = conversion(name);") 
+0

感謝。這將是最有效的更新方法嗎? – duhamp