Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
sql语句在python中的运行速度比命令行sqlite3慢得多_Python_Sqlite - Fatal编程技术网

sql语句在python中的运行速度比命令行sqlite3慢得多

sql语句在python中的运行速度比命令行sqlite3慢得多,python,sqlite,Python,Sqlite,我有一个sql脚本,创建2个临时表,然后根据临时表4个步骤创建2个永久表。不返回任何行。当使用从命令行运行该脚本时 $sqlite3 MyDB.db-init summary.sql 不到一分钟。 当sql在python中通过sqlite3标准模块作为大字符串运行时 connection.executescript 需要15分钟。前3步需要1分钟,最后一步需要14分钟 考虑到它是完全相同的sql,python会做些什么使其速度减慢这么多呢?我怎样才能加快速度? 最后一步是放置表(如果存在xxx)

我有一个sql脚本,创建2个临时表,然后根据临时表4个步骤创建2个永久表。不返回任何行。当使用从命令行运行该脚本时 $sqlite3 MyDB.db-init summary.sql 不到一分钟。 当sql在python中通过sqlite3标准模块作为大字符串运行时 connection.executescript 需要15分钟。前3步需要1分钟,最后一步需要14分钟

考虑到它是完全相同的sql,python会做些什么使其速度减慢这么多呢?我怎样才能加快速度?
最后一步是放置表(如果存在xxx);创建表xxx作为选择。。。这是一个连接,但它与命令行快速运行的连接相同。一位朋友建议使用apsw模块,但我不愿意毫无理由地切换。

在我的测试中,从Python调用SQLite要比命令行调用慢100倍左右。这里有一个解决方案。我只是将查询输出到一个文本文件sql.txt,并从Python调用一个命令行SQLite调用:

import subprocess
import sys

print subprocess.Popen("sqlite3 reviews.db < sql.txt", shell=True, stdout=subprocess.PIPE).stdout.read()

您可以使用.read filename命令向sql.txt添加多个查询并调用其他文件

是否检查了Python安装所依据的SQLite版本是否与命令行工具中的版本匹配?也就是说,请查看sqlite3.SQLite_version常量。还值得比较运行时配置-隔离级别&c.I在Windoze 7上。作为一个python noob,我有一个新的python安装,这是Anaconda提供的。sqlite3.sqlite_版本为“3.6.21”。Cygwin$sqlite3提供的命令行程序-版本返回3.8.7 2014-10-17 11:24:17。为了好玩,我尝试使用apsw模块从python运行sql。需要半分钟。我猜本机sqlite3模块不知何故插入了自身,它可能是每行提交吗??在某种程度上。时速。这不是一个答案,但至少我有一个解决办法。这里没有真正的原生SQLite。Python的sqlite3模块和apsw模块都有SQLite库的编译副本;Python只是碰巧要老得多。如果将代码放入代码块中,看起来会更好。请参见编辑窗口中的“{}”按钮。