SQL语句在Python中的运行速度远低于命令行SQLite3

ut6juiuv  于 2022-12-27  发布在  SQLite
关注(0)|答案(1)|浏览(207)

我有一个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模块,但我不愿意在没有充分理由的情况下切换。

fgw7neuy

fgw7neuy1#

在我的测试中,从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命令调用其他文件

相关问题