在 SQLite3 表中的行上有效地执行 python 代码
Posted
技术标签:
【中文标题】在 SQLite3 表中的行上有效地执行 python 代码【英文标题】:Execute python code efficiently on rows in SQLite3 table 【发布时间】: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)
是否可以解决这个问题?
如何优化此过程,使其快速但又不占用大量内存?
【问题讨论】:
【参考方案1】:直接从 SQLite 调用函数时,行会一一更新:
db.create_function('conversion', 1, conversion)
cursor.execute("UPDATE table1 SET info = conversion(name);")
【讨论】:
谢谢。那么这会是最有效的更新方法吗?以上是关于在 SQLite3 表中的行上有效地执行 python 代码的主要内容,如果未能解决你的问题,请参考以下文章