如何更新多行?

时间:2012-10-13 04:13:33

标签: sql sqlite

表格如下:

status1   status2   status3   element
  0         1         2       music1
 ...

我的脚本会像这样提取数十万行,使用它们进行一些处理,然后写回新状态。问题是,如果我像这样逐个更新这些行:

UPDATE music_table
  SET status1 = '10',
      status2 = '20,
      status3 = 30
WHERE element = 'music1';

完成所有操作需要花费大量时间。 (超过1.5小时!!)

所以问题是,如何同时更新多行甚至是否可能?

1 个答案:

答案 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()
相关问题