0

该表如下所示:

status1   status2   status3   element
  0         1         2       music1
 ...

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

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

完成所有工作将花费大量时间。(超过 1.5 小时!!)

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

4

1 回答 1

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()
于 2012-10-13T10:47:46.937 回答