简单的脚本-自动加载到sqlite文件/数据库

时间:2019-04-18 11:18:01

标签: shell sqlite batch-file

我想自动将数据加载到sqlite数据库文件中。 如何做到上一行结束时每一行都可以执行?

我可以使用.bat或.ps1文件吗?

sqlite3 path\test.db
DELETE * FROM sales;
.mode csv
.import path2\sales.csv sales_tmp
INSERT INTO sales select * from sales_tmp;
DROP TABLE IF EXISTS sales_tmp;
vacuum;
.quit

2 个答案:

答案 0 :(得分:0)

sqlite3 path\test.db^
 -cmd "DELETE FROM sales;"^
 -cmd ".mode csv"^
 -cmd "CREATE TABLE sales_tmp (col1, col2);"^
 -cmd ".import 'path2\sales.csv' 'sales_tmp'"^
 -cmd "INSERT INTO sales SELECT * FROM sales_tmp;"^
 -cmd "DROP TABLE IF EXISTS sales_tmp;"^
 -cmd "vacuum;"^
 ""

-cmd COMMAND将在读取stdin之前运行COMMAND

行尾的^是连续字符,因此可以避免使用较长的命令行。

在导入数据之前,您确实需要创建sales_tmp表,因此我添加了 表创建语句。根据需要调整列名称。

最后的""是sql语句,如果为空,则允许sqlite3退出。 如果省略该参数,则它将进入交互模式。

要获取有关sqlite3的命令行帮助,请在sqlite3 --help提示符下键入cmd

要获得有关sqlite3的交互式帮助,请在交互式.help提示符下键入sqlite3

答案 1 :(得分:0)

这似乎在Powershell中有效:

Write-Output @"
DELETE * FROM sales;
.mode csv
.import path2/sales.csv sales_tmp
INSERT INTO sales SELECT * FROM sales_tmp;
DROP TABLE IF EXISTS sales_tmp;
VACUUM;
.quit
"@ | sqlite3 test.db

(使用Powershell方言herestring,如我先前的链接中有关heredocs的评论中所述)