【发布时间】:2010-10-14 04:54:00
【问题描述】:
我正在尝试将大量数据(550 万行)批量加载到 SQLite 数据库文件中。 通过 INSERT 加载似乎太慢了,所以我尝试使用 sqlite3 命令行工具和 .import 命令。
如果我手动输入命令,它会完美运行,但我一生都无法弄清楚如何从脚本(.bat 文件或 python 脚本;我在 Windows 机器上工作)自动化它.
我在命令行发出的命令如下:
> sqlite3 database.db
sqlite> CREATE TABLE log_entry ( <snip> );
sqlite> .separator "\t"
sqlite> .import logfile.log log_entry
但我尝试的任何方法都无法从 bat 文件或 python 脚本中运行。
我一直在尝试这样的事情:
sqlite3 "database.db" .separator "\t" .import logfile.log log_entry
echo '.separator "\t" .import logfile.log log_entry' | sqlite3 database.db
我肯定能做到这一点吗?
【问题讨论】:
-
通过 INSERT 加载的速度有多慢?我在 12 分钟内使用插入语句在 Sqlite 中插入了 1500 万行大行。您必须使用事务和准备好的语句。
-
非常慢。我正在使用 python 来解析日志文件并将每一行作为一行插入。我没有使用准备好的语句,但我正在使用事务。即便如此,使用 sqlite3 程序执行此操作要快得多。
-
使用准备好的语句会产生巨大的差异。我可以在标准 PC 上使用 INSERT 在 12 分钟内创建一个 2 GB 的 sqlite 数据库(1 个带有 1 个索引的大表)。
-
@tuinstoel 您能否举例说明将 INSERT 准备好的语句或事务放置在 insert.sql 脚本
sqlite3 test.db < insert.sql中的语法?这里 insert.sql 包含CREATE TABLE log_entry ( <snip> ); .separator "\t" .import logfile.log log_entry作为 OP
标签: sqlite scripting batch-file