我的数据库中有以下信息(示例):
longitude (real): 70.74
userid (int): 12
这是我如何获取它:
import sqlite3 as lite
con = lite.connect(dbpath)
with con:
cur = con.cursor()
cur.execute('SELECT latitude, userid FROM message')
con.commit()
print "executed"
while True:
tmp = cur.fetchone()
if tmp != None:
info.append([tmp[0],tmp[1]])
else:
break
在表格上获取相同的信息[70.74,12] 我还能做些什么来加快这个过程?在10,000,000行,这需要大约50秒,因为我瞄准200,000,000行 - 我从来没有通过这个,可能是内存泄漏或类似的事情?
答案 0 :(得分:1)
来自sqlite3文档:
Row实例用作Connection对象的高度优化的row_factory。它试图模仿大部分功能中的元组。
由于Row
非常类似于元组,因此根据您的需要,您甚至可能无需解压缩结果。
但是,由于您的数字类型存储为字符串,我们需要进行一些处理。正如@Jon Clements指出的那样,光标是可迭代的,所以我们可以使用理解,同时获得float
和int
。
import sqlite3 as lite
with lite.connect(dbpath) as conn:
cur = conn.execute('SELECT latitude, userid FROM message')
items = [[float(x[0]), int(x[1])] for x in cur]
编辑:我们没有进行任何更改,因此我们无需致电commit
。