Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,SQlite 3插入超慢_Python_Sql_Sqlite - Fatal编程技术网

Python,SQlite 3插入超慢

Python,SQlite 3插入超慢,python,sql,sqlite,Python,Sql,Sqlite,由于某些原因,insert指令速度非常慢 我所说的痛苦的缓慢,是指我从每秒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) VA

由于某些原因,insert指令速度非常慢

我所说的痛苦的缓慢,是指我从每秒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"

我不认为我需要提交每一个插入,但将它放在每个函数的末尾并没有什么区别。

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

不幸的是,根据您的版本,没有典型的插入。。。值…,值。。。正如我们在大多数DBMS中所知道的,但是有一个解决方案可以根据这个解决方案进行修改


积累大量并使用ExecuteMan问题是,我希望它尽可能快且实时。如果需要的话,我可以使用一个点列表,并提供足够的ram,然后将其保存在sql数据库中。可能我使用sql的应用程序不正确。哦,是的,我会的。谢谢。@RustyShackleford然后我会切换到内存中的表:内存:它们的速度不是非常快,但随着表的增长,内存访问将比磁盘表提供更好的结果-她是某个[基准测试]以前,如果您真的只有点,或者始终是相同的数据模型,没有varchar字段,但实际上是固定宽度字段,然后,您可能会更好地将整个表读入一个python数组并遍历它—当然比让python使用sqllite更快—我认为您不需要查询和表连接以及所有这些,所以使用数据库不应该是您的选择!我确实需要查询,并像向表中写入数据一样使用它们。但是,查询没有任何可测量的速度损失。但是,一旦列表变得太大,每隔一段时间向表中写入一次也不会有问题。
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])
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