0

テーブルは次のようになります。

status1   status2   status3   element
  0         1         2       music1
 ...

私のスクリプトは、このような数十万行を抽出し、それらを処理してから、新しいステータスを書き戻します。問題は、これらの行を次のように 1 つずつ更新する場合です。

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

すべてを終えるには、ものすごい時間がかかります。(1.5時間以上!!)

問題は、複数の行を同時に更新するにはどうすればよいですか、それとも可能ですか?

4

1 に答える 1

0

element一度に 1 つの行を更新する場合、列にインデックスがあると、行を見つけるのが速くなります。

ただし、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 に答える