我正在更新一个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,所以我假设我做的事情显然是次优的,但我不确定是什么.如何提高此更新的性能?
你正在承诺每一行.不要这样做,在更新所有行时提交.
对于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)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |