使用python在sqlite中填充新列的性能

Sev*_*ess 0 python sqlite

我正在更新一个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
Run Code Online (Sandbox Code Playgroud)

这对于65K行数据库来说运行的时间非常长.我刚开始使用sql,所以我假设我做的事情显然是次优的,但我不确定是什么.如何提高此更新的性能?

Mar*_*ers 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()
Run Code Online (Sandbox Code Playgroud)