#author("2018-06-18T23:50:17+09:00","","")
#author("2018-06-18T23:51:45+09:00","","")
#navi(../)

* SQLiteでCSVを投入(インポート)する方法 [#i31403bb]
SQLite3を使って、csvファイルをテーブルにインポートする操作例を以下に記します。

#contents
#htmlinsertpcsp(db-top.html,db-sp.html)

* 使用した環境 [#f461eca4]
本資料の動作確認は以下の環境で行いました。
-OS~
--Ubuntu 16.04.4 LTS
--Debian GNU/Linux 9.4 (stretch)
-SQLite3~
--3.11.0 2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f
--3.16.2 2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209

* インポートを行うための準備環境 [#tb7737fb]
CSVをSQLiteに投入するために、CSVファイルの準備とCREATE TABLEを行いました。
-作成したテーブル
 CREATE TABLE t1 (
  ID,
  NAME,
  CODE
 );

-準備したcsvファイル~
&ref(cc.csv); 改行コードLF
&ref(cc.csv); (改行コードLF)
 1,"Bitcoin","BTC"
 2,"Ethereum","ETH"
 3,"Bitcoin Cash","BCH"
 4,"Litecoin","LTC"
 5,"Shield","XSH"

* csvファイルを投入する [#k4fa339e]
以下の操作により、csvファイルをインポートすることができます。
+ csvをインポートするデータベースを作成~
 sqlite3 importdb.sqlite3
以下、実行時の出力です。
 sakura@debian:~$ sqlite3 importdb.sqlite3
 SQLite version 3.16.2 2017-01-06 16:32:41
 Enter ".help" for usage hints.
 sqlite> 
+ csv投入用のテーブルを作成する
 CREATE TABLE t1 (
   ID,
   NAME,
   CODE
 );
以下、実行時の出力です。
 sqlite> CREATE TABLE t1 (
    ...>   ID,
    ...>   NAME,
    ...>   CODE
    ...> );
 sqlite> 
+ セパレータ文字列を確認する~
 .show
以下、実行時の出力です。
 sqlite> .show
         echo: off
          eqp: off
      explain: auto
      headers: off
         mode: list
    nullvalue: ""
       output: stdout
 colseparator: "|"
 rowseparator: "\n"
        stats: off
        width: 
     filename: importdb.sqlite3
 sqlite> 
本出力にある、''colseparator''がパイプ''|''になっています。~
これをカンマ(,)に変更します。
+ colseparatorをカンマに変更する
 .separator ,
以下、実行時の出力です。
 sqlite> .separator ,
 sqlite> 
+ 変更されたか確認します
 sqlite> .show
         echo: off
          eqp: off
      explain: auto
      headers: off
         mode: list
    nullvalue: ""
       output: stdout
 colseparator: ","
 rowseparator: "\n"
        stats: off
        width: 
     filename: importdb.sqlite3
 sqlite> 
''colseparator''が'',''に変更されているのが確認できます。
+csvファイルを投入します
 .import ファイル名 テーブル名
以下、実行時の出力です。
 sqlite> .import ./cc.csv t1
 sqlite> 
+実際にインポートされたか確認します
 sqlite> SELECT * FROM t1;
 1,Bitcoin,BTC
 2,Ethereum,ETH
 3,Bitcoin Cash,BCH
 4,Litecoin,LTC
 5,Shield,XSH
 sqlite> 
+投入されたことが確認できましたが、セパレータをカンマ(,)に変更したため、パイプ(|)に戻し、再度SELECTを発行してみます
 sqlite> SELECT * FROM t1;
 1|Bitcoin|BTC
 2|Ethereum|ETH
 3|Bitcoin Cash|BCH
 4|Litecoin|LTC
 5|Shield|XSH
 sqlite> SELECT ID,CODE FROM t1;
 1|BTC
 2|ETH
 3|BCH
 4|LTC
 5|XSH
csvが投入されているのが確認できました。
+ sqlite3を終了します。
 sqlite> .quit

* コマンドラインから直接投入する方法 [#i56871eb]
コマンドラインからSQLiteにcsvファイルの内容をインポートする手順を以下に記します。
+データベースとテーブルを作成します
 sakura@debian:~$ sqlite3 direct.sqlite3 "CREATE TABLE t1 (ID, NAME, CODE);"
+ -separatorにカンマ(,)を指定し、.importでcsvファイルを取り込みます
 sakura@debian:~$ sqlite3 direct.sqlite3 -separator , ".import ./cc.csv t1"
+ 取り込みされているかの確認です
 sakura@debian:~$ sqlite3 direct.sqlite3 "select * from t1"
 1|Bitcoin|BTC
 2|Ethereum|ETH
 3|Bitcoin Cash|BCH
 4|Litecoin|LTC
 5|Shield|XSH

* .separatorについて [#l83e3f51]
.separatorについて確認すると、以下のようになっています。
 $ man sqlite3
 <省略>
  .separator STRING ?NL? Change separator used by output mode and .import
                           NL is the end-of-line mark for CSV
 <省略>
構文は以下のようになります。
 .separator セパレータ文字列 改行
つまり、.showで表示されるcolseparatorとrowseparatorに対応します。
 .separator colseparator rowseparator
以下、実際に行セパレータ(rowseparator)を設定した例になります。
-変更前
 sqlite> .show
         echo: off
          eqp: off
      explain: auto
      headers: off
         mode: list
    nullvalue: ""
       output: stdout
 colseparator: "|"
 rowseparator: "\n"
        stats: off
        width: 
     filename: foo.sqlite3
-変更後
 sqlite> .separator , "\r\n"
 sqlite> .show
        echo: off
         eqp: off
     explain: auto
     headers: off
        mode: list
   nullvalue: ""
      output: stdout
 colseparator: ","
 rowseparator: "\r\n"
       stats: off
       width: 
    filename: foo.sqlite3
尚、引数を与えず、.separatorを実行すると、使用方法が表示されます。
 sqlite> .separator
 Usage: .separator COL ?ROW?
出力の通り、COLは必須ですが、ROWは任意です。

以上、SQLiteでCSVをインポートする操作例でした。


#htmlinsertpcsp(db-btm.html,db-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS