- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-06-18T23:50:17+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
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)