如何正确格式化sqlite shell输出?

Ksh*_*rma 121 sqlite

如果我去mysql shell输入SELECT * FROM users我得到 -

+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
| USERID | NAME           | EMAILID                         | PASSWORD | USER_TYPE | CONTACT_ID_FKUSERS | COMPANY_ID_FKUSERS |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
|    137 | X              | b@cc.com                        | #        | ADMIN     |                166 |                110 |
|    138 | Kshitiz        | ksharma@aaa.com                 | asdf     | ADMIN     |                167 |                111 |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+
Run Code Online (Sandbox Code Playgroud)

Oracle sqlplus 显示——

USERID     NAME  EMAILID    PASSWORD   USER_TYPE  CONTACT_ID_FKUSERS COMPANY_ID_FKUSERS
---------- ----- ---------- ---------- ---------- ------------------ ------------------
137        X     b@cc.com   #          ADMIN                     166                110
137        X     b@cc.com   #          ADMIN                     166                110
Run Code Online (Sandbox Code Playgroud)

Sqlite shell 显示——

137|X|b@cc.com|#|ADMIN|166|110
138|Kshitiz|ksharma@aaa.com|asdf|ADMIN|167|111
Run Code Online (Sandbox Code Playgroud)
  1. 有没有办法美化输出sqlite shell
  2. 是否有比默认发行版更好的替代外壳?(仅限 CLI 客户端)

Mat*_*Mat 160

对于“人类可读”的输出,您可以使用column模式并打开标题输出。这将使您获得与sqlplus示例中的输出类似的内容:

sqlite> select * from foo;
234|kshitiz|dba.se
Run Code Online (Sandbox Code Playgroud)
sqlite> .mode column
sqlite> select * from foo;
234         kshitiz     dba.se
Run Code Online (Sandbox Code Playgroud)
sqlite> .headers on
sqlite> select * from foo;
bar         baz         baf
----------  ----------  ----------
234         kshitiz     dba.se
Run Code Online (Sandbox Code Playgroud)

  • 但是请注意,您可能需要使用 `.width` 命令来使列更宽。否则您的内容将在视觉上被截断。 (7认同)
  • 如果您不想每次都手动执行此操作,可以将其添加到您的 `~/.sqliterc` 文件中。 (7认同)
  • 美丽,谢谢!内容不适合(水平),而且似乎没有内置寻呼机,所以我不得不使用 `echo -e '.mode column\n.headers on\nselect * from sip_foo;\n' | sqlite3 数据库.sqlite | less -S` 每行一行,无需自动换行。 (2认同)

mik*_*n32 37

所有的答案都提供了您可以在 SQLite 控制台或通过 CLI 键入的设置,但没有人提到可以将这些设置放入 RC 文件中以避免一直键入它们。将其另存为~/.sqliterc

.mode column
.headers on
.separator ROW "\n"
.nullvalue NULL
Run Code Online (Sandbox Code Playgroud)

注意我还为空值添加了一个占位符,而不是默认的空字符串。


小智 16

对于那些有兴趣获得相同结果的人,除了从命令行运行 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
Run Code Online (Sandbox Code Playgroud)

相反,您必须将选项 -column 和 -header 与 sqlite 命令一起使用,如下所示:

$ sqlite3 -column -header <dbfile> "select * from MyTable"
Run Code Online (Sandbox Code Playgroud)

使用:

$ sqlite3 --version 3.8.11.1 2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f
Run Code Online (Sandbox Code Playgroud)


小智 10

我总是用

.mode line
Run Code Online (Sandbox Code Playgroud)

它垂直打印查询结果,类似于 MySQL 的\G修饰符。