如何在python中更快地从SQLite中检索数据

时间:2015-03-21 01:04:24

标签: python sqlite

我的数据库中有以下信息(示例):

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行 - 我从来没有通过这个,可能是内存泄漏或类似的事情?

1 个答案:

答案 0 :(得分:1)

来自sqlite3文档:

  

Row实例用作Connection对象的高度优化的row_factory。它试图模仿大部分功能中的元组。

由于Row非常类似于元组,因此根据您的需要,您甚至可能无需解压缩结果。

但是,由于您的数字类型存储为字符串,我们需要进行一些处理。正如@Jon Clements指出的那样,光标是可迭代的,所以我们可以使用理解,同时获得floatint

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