【macOS】【続】PowerShell から SQLite を使うための備忘録・補遺【.import】
.import で CSV ファイルを扱う話の続き…
何度も書いたように、SQLite 内部では CSV 形式では格納されていないため、CSV 形式でやりとりするためには、.separator で区切り文字を切り替えるか、SQLite 外部で CSV 形式に変換する必要がある。
実は、.separator の他に、.mode csv でも同様の指定ができる。
.mode csv も .separator と同様に、セッション中有効なので、複数行のステートメントでコマンドを渡せば、.mode 以降のステートメントでは、CSV 形式が適用(mode)されて入出力ができる。
そこで、.separator と .mode による切り替えが全く同様なのか検証してみた。
まず .separator '|'
PS /Users/hoge/devPwsh> @" >> DELETE FROM Proverb; >> .separator , >> .import ./Proverb.csv --skip 1 Proverb >> SELECT * FROM Proverb; >> "@ | sqlite3 ./Proverb.db $_ 1,厩戸皇子,以和爲貴 2,釈迦,天上天下唯我独尊 3,孔子,有朋自遠方来不亦楽乎 4,杜甫,国破山河在 PS /Users/hoge/devPwsh>
次に .mode csv
PS /Users/hoge/devPwsh> @" >> DELETE FROM Proverb; >> .mode csv >> .import ./Proverb.csv --skip 1 Proverb >> SELECT * FROM Proverb; >> "@ | sqlite3 ./Proverb.db $_ 1,"厩戸皇子","以和爲貴" 2,"釈迦","天上天下唯我独尊" 3,"孔子","有朋自遠方来不亦楽乎" 4,"杜甫","国破山河在" PS /Users/hoge/devPwsh>
そしてて SQLite デフォルト形式を convertfrom-csv と convertto-csv で変換した場合。
PS /Users/hoge/devPwsh> @" >> DELETE FROM Proverb; >> .import ./Proverb.csv --csv --skip 1 Proverb >> SELECT * FROM Proverb; >> "@ | sqlite3 ./Proverb.db $_ | convertfrom-csv -delimiter '|' | convertto-csv "1","厩戸皇子","以和爲貴" "2","釈迦","天上天下唯我独尊" "3","孔子","有朋自遠方来不亦楽乎" "4","杜甫","国破山河在" PS /Users/hoge/devPwsh>
このように、文字列については double-quote で囲われる方が望ましいので .separator は避けるべきかもしれない。
また、Powershell で読み込むのではなく、一旦 CSV ファイルとして結果を格納したいのなら、convertfrom-csv と convertto-csv 経由だと数値データも double-quote で囲われるため、使い方に留意すべきだろう。
何にせよ .separator も .mode も、convertfrom-csv と convertto-csv で変換してしまえば、結果は同一。
PS /Users/hoge/devPwsh> @" >> DELETE FROM Proverb; >> .separator , >> .import ./Proverb.csv --skip 1 Proverb >> SELECT * FROM Proverb; >> "@ | sqlite3 ./Proverb.db $_| convertfrom-csv | convertto-csv "1","厩戸皇子","以和爲貴" "2","釈迦","天上天下唯我独尊" "3","孔子","有朋自遠方来不亦楽乎" "4","杜甫","国破山河在" PS /Users/hoge/devPwsh>
PS /Users/hoge/devPwsh> @" >> DELETE FROM Proverb; >> .mode csv >> .import ./Proverb.csv --skip 1 Proverb >> SELECT * FROM Proverb; >> "@ | sqlite3 ./Proverb.db $_ | convertfrom-csv | convertto-csv "1","厩戸皇子","以和爲貴" "2","釈迦","天上天下唯我独尊" "3","孔子","有朋自遠方来不亦楽乎" "4","杜甫","国破山河在" PS /Users/hoge/devPwsh>