(1)什麼是csv文件?
CSV,即Comma-Separated Values,意思是逗號分隔值,或字符分隔值。.csv文件是一種將表數據藉助字符分隔的方式存儲成文本的文件格式。譬如,可以在excel中另存爲csv文件。我們先來試一個,創建一個excel文件,內容如下:
A | B | C |
---|---|---|
0 | name0 | des0 |
1 | name1 | des1 |
2 | name2 | des2 |
另存,選擇格式爲csv,會彈窗要求輸入分隔符,輸入“|”,得到文本文件,用文本瀏覽器查看內容如下:
0|name0|des0
1|name1|des1
2|name2|des2
(2)如何將SQLite數據庫表導出到csv文件?
先用show命令看一下當前SQLite用戶shell中的設置,其中包含分隔符:
sqlite> .show
echo: off
eqp: off
explain: off
headers: off
mode: list
nullvalue: ""
output: stdout
colseparator: "|"
rowseparator: "\n"
stats: off
width:
看到分隔符爲“|”。可以使用separator命令來指定分隔符:
sqlite> .separator ,
sqlite> .separator |
sqlite>
導出到csv的原理很簡單,將SQLite輸出重定向到.csv文件,然後執行select。同樣,使用ouput命令,無需手動創建輸出的文件,直接輸入文件名作爲output命令參數即可:
sqlite> select * from test_table;
0|name0|des0
1|name1|des1
2|name2|des2
sqlite>
sqlite> .output test_csv.csv
sqlite> select * from test_table;
sqlite> .output stdout
好,查看test_csv.csv文件內容:
0|name0|des0
1|name1|des1
2|name2|des2
因爲這種方式其實只是重定向了輸出,執行的是SQL,所以可以滿足各種數據組合、篩選等需求。
(3)如何將csv文件導入到SQLite數據庫?
使用import命令(.import [file][table]):
sqlite> delete from test_table;
sqlite>
sqlite> select * from test_table;
sqlite>
sqlite> .import test_csv.csv test_table
sqlite>
sqlite> select * from test_table;
0|name0|des0
1|name1|des1
2|name2|des2
sqlite>
如果數據庫中沒有這個表,import命令會直接創建表嗎?yes。
sqlite> .import test_csv.csv test_table2
sqlite>
sqlite> select * from test_table2;
1|name1|des1
2|name2|des2
sqlite>
sqlite> .schema test_table2
CREATE TABLE test_table2(
"0" TEXT,
"name0" TEXT,
"des0" TEXT
);
看到使用import將csv文件導入到一個不存在的表時,會自動創建這個表,但是會把第一行解析成表信息,並且每個字段都會定義成TEXT。
另外,注意,csv文件的字段分隔符需要與SQLite用戶shell中的設置一致。將test_csv.csv文件分隔符改一下測試一下:
0,name0,des0
1,name1,des1
2,name2,des2
sqlite> delete from test_table;
sqlite>
sqlite> select * from test_table;
sqlite>
sqlite> .import test_csv.csv test_table
test_csv.csv:1: expected 3 columns but found 1 - filling the rest with NULL
test_csv.csv:1: INSERT failed: datatype mismatch
test_csv.csv:2: expected 3 columns but found 1 - filling the rest with NULL
test_csv.csv:2: INSERT failed: datatype mismatch
test_csv.csv:3: expected 3 columns but found 1 - filling the rest with NULL
test_csv.csv:3: INSERT failed: datatype mismatch
sqlite>
sqlite> select * from test_table;
sqlite>