在 SQLite3 表中的行上有效地执行 python 代码

Posted

技术标签:

【中文标题】在 SQLite3 表中的行上有效地执行 python 代码【英文标题】:Execute python code efficiently on rows in SQLite3 table 【发布时间】:2016-11-25 15:17:53 【问题描述】:

我有一个大表(table1,列是 namekeyinfo),其中有大约 1,000,000 行我需要执行以下操作:

    选择infoNull"" 的所有行 在 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 代码的主要内容,如果未能解决你的问题,请参考以下文章

重置 SQLite3/MySQL 中的行数计数

此时确保 HBase 表中的行数增加的最有效方法是啥?

使用任何 doctype 在 Internet Explorer 中悬停表中的行都很慢

SQLite3代码动态插入要删除的行数据的列值

如何在一个非常大的表中有效地选择

如何让每个 customLabel 在自己的行上?