【问题标题】:How to update multiple rows?如何更新多行?
【发布时间】:2012-10-13 04:13:33
【问题描述】:

表格如下所示:

status1   status2   status3   element
  0         1         2       music1
 ...

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

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

完成所有工作需要很长时间。 (超过 1.5 小时!!)

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

【问题讨论】:

  • 可以一次更新多行。但这取决于与其他表的关系。您还有其他与上表有关系的表吗?
  • @Blair:从没想过会这么简单。非常感谢!!
  • @naoki:是的。这是一个独立的表。
  • SQLite 还为内存缓存设置了相当低的值,这对于嵌入式使用来说是很好的,但是如果在内存可用时增加缓存大小,写入性能可以大大提高。请参阅编译指示。

标签: sql sqlite


【解决方案1】:

如果您一次更新一行,则在 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2022-01-26
    • 2015-04-20
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多