我有一个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模块,但我不喜欢切换没有强烈的原因。
答案 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
命令调用其他文件