我想將資料從 JSON 檔案插入到 SQLite-Databse 中,其中包含來自批處理檔案的現有表。
首先,我用 jq 過濾有缺陷的 JSON 檔案,然后打開資料庫并嘗試插入資料,但打開資料庫后,批處理檔案停止接收來自 sqlite3 的命令。
這是批處理檔案的樣子:
jq -r ".[]" D:\path\2\json_file\somedata.json > D:\path\2\json_file\somedata_new.json
sqlite3 "C:\path\2\DB_Folder\db1.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:\path\2\json_file\somedata_new.json'));
但是在執行sqlite3 "C:\path\2\DB_Folder\db1.sqlite"批處理檔案后停止接收 sqlite3 的命令并且INSERT-Statement 被忽略。
如果我直接在命令列中執行命令,一切正常。
我試圖用-Statement創建一個像這里這樣的檔案,INSERT但 mytable仍然是空的。
有誰能夠幫助我?
順便說一句,有必要在沒有任何用戶操作的情況下自動輸入資料。
提前感謝您的幫助。
uj5u.com熱心網友回復:
從SQLite 檔案:
在 shell 腳本中使用 sqlite3 的一種方法是使用“echo”或“cat”在檔案中生成一系列命令,然后在從生成的命令檔案重定向輸入的同時呼叫 sqlite3。這作業正常并且適用于許多情況。但作為額外的便利,sqlite3 允許在命令列上輸入單個 SQL 命令作為資料庫名稱之后的第二個引數。當sqlite3程式以兩個引數啟動時,第二個引數傳遞給SQLite庫進行處理,查詢結果以串列方式列印在標準輸出上,程式退出。
所以你可以這樣做:
echo "insert into ...." | sqlite3 "C:\path\2\DB_Folder\db1.sqlite"
或者
sqlite3 "C:\path\2\DB_Folder\db1.sqlite" "insert into ...."
在這兩種情況下,請注意 cmd.exe 的轉義/參考規則。
作為最后一種選擇,您可以使用 jq 將 JSON 轉換為 CSV 檔案,并使用更簡單的 SQLite .import 命令。
jq -r ".[] | [ .col1, .col2, .col3, .col4 ] | @csv" somedata.json > somedata.csv
sqlite3 "C:\path\2\DB_Folder\db1.sqlite" ".import somedata.csv mytable"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/322040.html
上一篇:如何在VisualStudio中加載丟失的系統符號檔案
下一篇:正確使用帶有百分號的命令
