2021年4月24日土曜日

SQLite3 .mode コマンドの出力サンプル

概要

SQLite 3 のコマンドラインツールはデフォルトの設定だと selectした結果を「|」(パイプ)と改行でつないで表示する。
この出力フォーマットは「.mode」コマンドで変更できる。

デフォルトは「list」

.headers」のON/OFFに関わらずヘッダーが出力されるモードがある。

.mode の出力フォーマット

.mode コマンドのヘルプ

環境
  • Windows 10
  • sqlite3 (3.35.3) Command-Line Shell

出力に関する部分だけ抜粋


.mode MODE ?TABLE?       Set output mode
MODE is one of:
    ascii     Columns/rows delimited by 0x1F and 0x1E
    box       Tables using unicode box-drawing characters
    csv       Comma-separated values
    column    Output in columns.  (See .width)
    html      HTML <table> code
    insert    SQL insert statements for TABLE
    json      Results in a JSON array
    line      One value per line
    list      Values delimited by "|"
    markdown  Markdown table format
    quote     Escape answers as for SQL
    table     ASCII-art table
    tabs      Tab-separated values
    tcl       TCL list elements
                

.mode ascii

アスキーコードで定義されたデータ区切りで表示する。
0x1F(US:ユニット区切り) 0x1E(RS:レコード区切り)
ASCIIコード表 日本工業大学

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode ascii
sqlite> select * from product;
1tomato1002potato120bagging3pumpkin50cuttedsqlite>
                

.mode box

.headers」の設定に関わらずカラム名が表示される。
SQLite 3 コマンドラインツールでselectの結果を見やすくする


sqlite> .mode box
sqlite> select * from product;
┌────┬─────────┬──────────┬─────────┐
│ id │  name   │ quantity │ remark  │
├────┼─────────┼──────────┼─────────┤
│ 1  │ tomato  │ 100      │         │
│ 2  │ potato  │ 120      │ bagging │
│ 3  │ pumpkin │ 50       │ cutted  │
└────┴─────────┴──────────┴─────────┘
                

.mode csv

CSV形式で出力する。
SQLite 3 CSVデータを取り込む、CSVデータを出力する

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode csv
sqlite> select * from product;
1,tomato,100,""
2,potato,120,bagging
3,pumpkin,50,cutted
                

.mode column

カラムを空白で揃えて表示する。
.headers on」でヘッダーを表示した方が見やすい。
SQLite 3 コマンドラインツールでselectの結果を見やすくする


sqlite> .mode column
sqlite> .headers on
sqlite> select * from product;
id  name     quantity  remark
--  -------  --------  -------
1   tomato   100
2   potato   120       bagging
3   pumpkin  50        cutted
                

.mode html

htmlのtable要素に貼り付けたい時に使う。
タグ名は大文字になってしまうので、必要があればテキストエディタなどで修正する。

.headers on」にするとカラム名をTHタグで囲んで出力してくれる。

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode html
sqlite> .headers on
sqlite> select * from product;
<TR><TH>id</TH>
<TH>name</TH>
<TH>quantity</TH>
<TH>remark</TH>
</TR>
<TR><TD>1</TD>
<TD>tomato</TD>
<TD>100</TD>
<TD></TD>
</TR>
<TR><TD>2</TD>
<TD>potato</TD>
<TD>120</TD>
<TD>bagging</TD>
</TR>
<TR><TD>3</TD>
<TD>pumpkin</TD>
<TD>50</TD>
<TD>cutted</TD>
</TR>
                

.mode insert

.headers」の設定に関わらず、カラム名が表示される。
SQLite 3 selectの結果からinsert文を作る

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode insert
sqlite> select * from product;
INSERT INTO "table"(id,name,quantity,remark) VALUES(1,'tomato',100,'');
INSERT INTO "table"(id,name,quantity,remark) VALUES(2,'potato',120,'bagging');
INSERT INTO "table"(id,name,quantity,remark) VALUES(3,'pumpkin',50,'cutted');
                

.mode json

.headers」の設定に関わらず、連想配列のフォーマットになる。
SQLite 3 JSON形式でデータを出力する

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode json
sqlite> select * from product;
[{"id":1,"name":"tomato","quantity":100,"remark":""},
{"id":2,"name":"potato","quantity":120,"remark":"bagging"},
{"id":3,"name":"pumpkin","quantity":50,"remark":"cutted"}]
                

.mode line

.headers」の設定に関わらず、カラム名が表示される。

product テーブル
id
integer
name
text
quantity
integer
remark
text
1 tomato 100
2 potato 120 bagging
3 pumpkin 50 cutted

sqlite> .mode line
sqlite> select * from product;
        id = 1
    name = tomato
quantity = 100
    remark =

        id = 2
    name = potato
quantity = 120
    remark = bagging

        id = 3
    name = pumpkin
quantity = 50
    remark = cutted
                

.mode list

デフォルトのモード。


sqlite> .mode list
sqlite> select * from product;
1|tomato|100|
2|potato|120|bagging
3|pumpkin|50|cutted
                

.mode markdown

.headers」の設定に関わらずカラムは表示される。
SQLite 3 コマンドラインツールでselectの結果を見やすくする


sqlite> .mode markdown
sqlite> select * from product;
| id |  name   | quantity | remark  |
|----|---------|----------|---------|
| 1  | tomato  | 100      |         |
| 2  | potato  | 120      | bagging |
| 3  | pumpkin | 50       | cutted  |
                

.mode quote

文字列をシングルクォートで囲み、データをカンマで区切った表示。
他のSQLに流用したい時に使う。


sqlite> .mode quote
sqlite> select * from product;
1,'tomato',100,''
2,'potato',120,'bagging'
3,'pumpkin',50,'cutted'
                

.mode table

.headers」の設定に関わらずカラムが表示される。
SQLite 3 コマンドラインツールでselectの結果を見やすくする


sqlite> .mode table
sqlite> select * from product;
+----+---------+----------+---------+
| id |  name   | quantity | remark  |
+----+---------+----------+---------+
| 1  | tomato  | 100      |         |
| 2  | potato  | 120      | bagging |
| 3  | pumpkin | 50       | cutted  |
+----+---------+----------+---------+
                

.mode tabs

タブ区切りで表示する。
SQLite 3 TSVデータを取り込む、TSVデータを出力する


sqlite> .mode tabs
sqlite> select * from product;
1       tomato  100
2       potato  120     bagging
3       pumpkin 50      cutted
                

.mode tcl

TCLのリスト要素として利用できる形式で出力される。


sqlite> .mode tcl
sqlite> select * from product;
"1" "tomato" "100" ""
"2" "potato" "120" "bagging"
"3" "pumpkin" "50" "cutted"
                

参考URL