如何将JSON文件中的数据从批处理文件插入SQLite数据库



我想从一个json文件插入数据到一个sqlite - database与一个现有的表从批处理文件

首先,我用jq过滤有缺陷的json文件,然后我打开数据库并尝试插入数据,但在打开数据库后,批处理文件停止接收来自sqlite3的命令。

批处理文件是这样的:

jq -r ".[]" D:path2json_filesomedata.json > D:path2json_filesomedata_new.json
sqlite3 "C:path2DB_Folderdb1.sqlite" 
INSERT INTO mytable (col1, col2, col3, col4) SELECT json_extract(value, '$.col1'), json_extract(value, '$.col2'), json_extract(value, '$.col3'), json_extract(value, '$.col4') FROM json_each(readfile('D:path2json_filesomedata_new.json')); 

但是在执行sqlite3 "C:path2DB_Folderdb1.sqlite"之后,批处理文件停止接收sqlite3的命令,并且忽略INSERT-语句。

如果我直接在命令行中执行命令,一切都很好。

我试着用INSERT-语句创建一个文件,但mytable仍然是空的。

有人能帮我吗?顺便说一句,需要自动输入数据,而不需要用户任何操作。

提前感谢您的帮助。

来自SQLite文档:

在shell脚本中使用sqlite3的一种方法是使用"echo"或";cat"要在文件中生成命令序列,然后调用sqlite3,同时从生成的命令文件重定向输入。这在很多情况下都很有效。但是为了方便起见,sqlite3允许在命令行中输入单个SQL命令,作为数据库名称之后的第二个参数。当使用两个参数启动sqlite3程序时,第二个参数被传递给SQLite库进行处理,查询结果以列表模式打印在标准输出中,然后程序退出。

所以你可以这样做:

echo "insert into ...." | sqlite3 "C:path2DB_Folderdb1.sqlite" 

sqlite3 "C:path2DB_Folderdb1.sqlite" "insert into ...."

在这两种情况下,请注意cmd.exe的转义/引用规则。

作为最后一种选择,您可以使用jq将JSON转换为CSV文件,并使用简单得多的SQLite .import命令。

jq -r ".[] | [ .col1, .col2, .col3, .col4 ] | @csv" somedata.json > somedata.csv
sqlite3 "C:path2DB_Folderdb1.sqlite" ".import somedata.csv mytable"

最新更新