#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)