表格如下:
status1 status2 status3 element
0 1 2 music1
...
我的脚本会像这样提取数十万行,使用它们进行一些处理,然后写回新状态。问题是,如果我像这样逐个更新这些行:
UPDATE music_table
SET status1 = '10',
status2 = '20,
status3 = 30
WHERE element = 'music1';
完成所有操作需要花费大量时间。 (超过1.5小时!!)
所以问题是,如何同时更新多行甚至是否可能?
答案 0 :(得分:0)
如果您一次更新一行,则在element
列上设置索引可以更快地找到该行。
但是,如果可以在SQL表达式中计算新状态,也可以一次更新多行:
UPDATE music_table SET status1 = status1 + 1
(这会更改所有行的状态;您仍然可以使用WHERE
将更新限制为某些行。)
如果计算更复杂,您可以注册用户定义的函数:
from pysqlite2 import dbapi2 as sqlite3
def compute_status1(a, b, c):
return a + b + len(c)
db = sqlite3.connect(...)
db.create_function("compute_status1", 3, compute_status1)
cur = db.cursor()
cur.execute('UPDATE music_table SET status1 = compute_status1(status2, status3, element)')
cur.close()