web-dev-qa-db-ja.com

sqliteシェル出力を適切にフォーマットする方法は?

mysql Shellに移動してSELECT * FROM usersと入力すると、

+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
| USERID | NAME           | EMAILID                         | PASSWORD | USER_TYPE | CONTACT_ID_FKUSERS | COMPANY_ID_FKUSERS |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
|    137 | X              | [email protected]                        | #        | ADMIN     |                166 |                110 |
|    138 | Kshitiz        | [email protected]                 | asdf     | ADMIN     |                167 |                111 |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+

Oracle sqlplus番組-

USERID     NAME  EMAILID    PASSWORD   USER_TYPE  CONTACT_ID_FKUSERS COMPANY_ID_FKUSERS
---------- ----- ---------- ---------- ---------- ------------------ ------------------
137        X     [email protected]   #          ADMIN                     166                110
137        X     [email protected]   #          ADMIN                     166                110

Sqlite Shell番組-

137|X|[email protected]|#|ADMIN|166|110
138|Kshitiz|[email protected]|asdf|ADMIN|167|111
  1. sqlite Shellからの出力を美しくする方法はありますか?
  2. デフォルトのディストリビューションよりも優れた代替シェルはありますか? (CLIクライアントのみ)
86
Kshitiz Sharma

「人間が読める」出力の場合、columnモードを使用して、ヘッダー出力をオンにすることができます。これにより、例のsqlplus出力に似たものが得られます。

sqlite> select * from foo;
234|kshitiz|dba.se
sqlite> .mode column
sqlite> select * from foo;
234         kshitiz     dba.se
sqlite> .headers on
sqlite> select * from foo;
bar         baz         baf
----------  ----------  ----------
234         kshitiz     dba.se
126
Mat

すべての回答は、SQLiteコンソールまたはCLIを介して入力できる設定を提供しますが、これらの設定をRCファイルに入れて、常に入力する必要がないことを誰も言及していません。これを~/.sqlitercとして保存:

.mode column
.headers on
.separator ROW "\n"
.nullvalue NULL

注:デフォルトの空の文字列の代わりに、null値のプレースホルダーも追加しました。

14
miken32

コマンドラインからsqliteを実行することを除いて、同じ結果を得ることに興味がある人のために。次の方法では機能しないことがわかりました。

$ sqlite3 <dbfile> ".headers on;.mode column;select * from MyTable"
Error: mode should be one of: ascii column csv html insert line list tabs tcl

代わりに、次のようにsqliteコマンドでオプション-columnおよび-headerを使用する必要があります。

$ sqlite3 -column -header <dbfile> "select * from MyTable"

使用:

$ sqlite3 --version 3.8.11.1 2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f
13
jersey bean

いつも使う

.mode line

これは、MySQLの\G修飾子と同様に、クエリ結果を垂直方向に出力します。

5
Geoff_Clapp

私は改行のない混乱のように見えました。 @Boxuanコメント

.separator ROW "\ n"を追加して、行を改行で区切ることもできます。私のものではありませんでした、そして出力は読めませんでした。 – Boxuan 5月11日15:08

私の問題も修正しました enter image description here

1
superheron

便宜上、.mode tabsを使用できます。

sqlite> select * from user;
name    age
Bob     18
ALi     19
1
Kevin

まだコメントできないので... Matとmlissnerがすでに提供しているすばらしい回答に加えて、いずれかの場合にsqliteシェルに正しい形式を指定した後、列のコンテンツが切り捨てられます(.mode column.headers onを使用して)前述のとおり)、.explainを使用する可能性もあるため、列の完全な内容が表示されます。

このコマンドの唯一の欠点は、列ヘッダーが縮小するため、適切に読み取られず、出力が非常に乱雑になる可能性があることです(視覚的なシナリオの場合)、.explain offを使用して以前の形式に戻り、さらに表示することができます "人間が読める形式」をもう一度。

このアプローチは、出力フォーマッタコマンドと組み合わせて使用​​できます。また、.widthの使用と同様に、完全な出力を取得するには常に正確な文字数を指定する必要があるため、データベース/列の完全なデータを表示する一時的なソリューションとして使用できます。列のデータの。

出力形式の変更の詳細については、デフォルトのCLIドキュメントへのクイックリファレンス:

https://www.sqlite.org/cli.html

1
Cho-Lung