SQLite實用武器庫(2)利用import命令導入導出數據到CSV文件

(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> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章