2016-11-25 83 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