当前位置:  开发笔记 > 编程语言 > 正文

如何使用sqlite3.exe命令行工具自动化进程?

如何解决《如何使用sqlite3.exe命令行工具自动化进程?》经验,为你挑选了4个好方法。

我正在尝试将大量数据(550万行)批量加载到SQLite数据库文件中.通过INSERT加载似乎太慢了,所以我试图使用sqlite3命令行工具和.import命令.

如果我手动输入命令,它可以很好地工作,但我不能为我的生活找出如何从脚本(.bat文件或python脚本;我在Windows机器上工作)自动化它.

我在命令行发出的命令是:

> sqlite3 database.db
sqlite> CREATE TABLE log_entry (  );
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

当然我能以某种方式做到这一点?



1> Joey..:

使用要在sqlite命令行程序中输入的行创建一个文本文件,如下所示:

CREATE TABLE log_entry (  );
.separator "\t"
.import logfile.log log_entry

然后打电话 sqlite3 database.db < commands.txt



2> nad2000..:

或者,您可以使用heredoc import.sh将所有内容放在一个shell脚本文件中(从而简化维护):

#!/bin/bash --
sqlite3 -batch $1 <<"EOF"
CREATE TABLE log_entry (  );
.separator "\t"
.import logfile.log log_entry
EOF

...并运行它:

import.sh database.db

它使维护一个脚本文件变得更容易.顺便说一句,如果您需要在Windows下运行它,Power Shell还具有heredoc功能

此外,此方法有助于处理缺少脚本参数支持.您可以使用bash变量:

#!/bin/bash --

table_name=log_entry

sqlite3 -batch $1 < );
.separator "\t"
.import logfile.log ${table_name}
EOF

甚至做这样的伎俩:

#!/bin/bash --

table_name=$2

sqlite3 -batch $1 < );
.separator "\t"
.import logfile.log ${table_name}
EOF

...并运行它: import.sh database.db log_entry



3> Mihai Limbăș..:

创建一个单独的文本文件,其中包含您通常在sqlite3 shell应用程序中键入的所有命令:

CREATE TABLE log_entry (  );
.separator "\t"
.import /path/to/logfile.log log_entry

保存为,例如,impscript.sql.

创建一个批处理文件,该文件使用该脚本调用sqlite3 shell:

sqlite3.exe yourdatabase.db < /path/to/impscript.sql

调用批处理文件.

在旁注 - 导入时,请确保在事务中包装INSERT!这将为您提供10.000%的即时加速.



4> 小智..:

我最近在将Firefox的cookies.sqlite转换为文本文件(对于某些下载工具)时遇到了类似的问题,并偶然发现了这个问题.

我想用一个shell线来做这个,这将是我的解决方案应用于上述问题:

echo -e ".mode tabs\n.import logfile.log log_entry" | sqlite3 database.db

但我还没有测试过那条线.但它在我上面提到的Firefox问题上运行良好(顺便说一下,在Mac OSX上通过Bash):

echo -e ".mode tabs\nselect host, case when host glob '.*' then 'TRUE' else 'FALSE' end, path, case when isSecure then 'TRUE' else 'FALSE' end, expiry, name, value from moz_cookies;" | sqlite3 cookies.sqlite

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有