Python,SQlite 3插入超慢

时间:2015-04-09 21:46:36

标签: python sql sqlite

由于某种原因,插入指令非常缓慢。

痛苦地缓慢,我的意思是我从每秒400次更新到大约5次。

这是有问题的方法:

@app.route('/sendData/<path:data>', methods=['POST'])
def receiveData(data): #Data = '0,2C7,2C6,1C8,2C2,1' always.
    def h(point):
        cur.execute("INSERT INTO points (x, y) VALUES({},{});".format(*point.split(",")))
        g.db.commit()

    cur = g.db.cursor()
    #list(map(h, data.split("C"))) This enables the slow.
    return "Done"

当我取消注释该地图时,它会变得非常缓慢。我也试过这个方法,同样的事情。

def receiveData(data): #Data = '0,2C7,2C6,1C8,2C2,1' always.
    cur = g.db.cursor()
    cur.execute("INSERT INTO points (x, y) VALUES({}, {});".format(*data.split("C",1)[0].split(",")))
    g.db.commit()
    if data.count("C") == 0:
        return "Done"
    else:
        return receiveData(data.split("C",1)[1])

我认为我不需要提交每一个插入内容,但是将它放在每个函数的末尾没有任何区别。

1 个答案:

答案 0 :(得分:0)

我建议您收集要插入的所有数据,然后构建多行插入(您可以测试性能明智,哪个限制最好)一次插入100个或更多点。

不幸的是,根据您的版本,我们从大多数DBMS中都知道不存在典型的INSERT ... VALUES(...), VALUES(..), ...,但是有一个解决方案可以根据此Question

进行改编。
INSERT INTO 'points' (x, y)
      SELECT 0 AS 'x', 2 AS 'y'
UNION SELECT 7, 2
UNION SELECT 6, 1
UNION SELECT 8, 2
UNION SELECT 2, 1