0

我正在更新一个 sqlite 数据库,使其具有一个bin填充数字 0 到 100 的新列。我编写了一个简单的脚本来说明我遇到的一些性能问题:

import sqlite3

conn = sqlite3.connect('partition_dev.db')
db_parts = conn.cursor()

i = 0
for row in db_parts.execute('''SELECT * from parts''').fetchall():
    db_parts.execute('''UPDATE parts set bin=? where entry=?''',(i,str(row[0])))
    conn.commit()
    i = i+1
    print i
    if i>100:
        i=0

对于一个 65K 行的数据库,这会运行很长时间。我是使用 sql 的新手,所以我认为我正在做一些明显次优的事情,但我不确定是什么。如何提高此更新的性能?

4

1 回答 1

6

您正在提交每一行。不要那样做,在所有行都更新后提交。

对于i计数器,您可以使用无限生成器;该count_to函数将为您生成从 0 到 100 的数字,从 0 开始无穷无尽:

def count_to(n):
    while True:
        for i in range(n):
            yield i

to100 = count_to(101)
for row in db_parts.execute('''SELECT * from parts''').fetchall():
    i = to100.next()
    db_parts.execute('''UPDATE parts set bin=? where entry=?''',
        (i, str(row[0]))
    )
    print i
conn.commit()
于 2012-09-21T15:03:05.100 回答