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

时间:2015-01-07 19:12:44

标签: python sqlite

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

鉴于它是完全相同的sql,python可以做些什么会减慢它的速度呢?我怎样才能加快速度呢? (最后一步是drop table if exists xxx; create table xxx as select ...它的联接,但它是命令行快速运行的相同联接。)朋友建议使用apsw模块,但我不喜欢切换没有强烈的原因。

1 个答案:

答案 0 :(得分:0)

在我的测试中,从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()

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