【发布时间】:2016-11-25 15:17:53
【问题描述】:
我有一个大表(table1,列是 name、key、info),其中有大约 1,000,000 行我需要执行以下操作:
- 选择
info为Null或""的所有行 - 在 Python 3 中执行一个转换函数,将
name转换为info(我们称之为conversion(name)) - 使用新的
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) 是否可以解决这个问题?
如何优化此过程,使其快速但又不占用大量内存?
【问题讨论】:
标签: python python-3.x sqlite