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

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

  1. 选择infoNull"" 的所有行
  2. 在 Python 3 中执行一个转换函数,将name 转换为info(我们称之为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) 是否可以解决这个问题?

如何优化此过程,使其快速但又不占用大量内存?

【问题讨论】:

    标签: python python-3.x sqlite


    【解决方案1】:

    直接从 SQLite 调用函数时,行会一一更新:

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

    【讨论】:

    • 谢谢。那么这会是最有效的更新方法吗?
    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    相关资源
    最近更新 更多