sqlite shell 출력을 올바르게 포맷하는 방법은 무엇입니까?


78

내가 가서 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 |
+--------+----------------+---------------------------------+----------+-----------+--------------------+--------------------+

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

Sqlite shell 쇼-

137|X|b@cc.com|#|ADMIN|166|110
138|Kshitiz|ksharma@aaa.com|asdf|ADMIN|167|111
  1. 의 출력을 아름답게하는 방법이 sqlite shell있습니까?
  2. 기본 배포보다 나은 대체 셸이 있습니까? (CLI 클라이언트 만)

답변:


112

"사람이 읽을 수있는"출력의 경우 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

감사합니다! 내용이 (가로로) 맞지 않았고 내장 페이저가없는 것처럼 보이므로 echo -e '.mode column\n.headers on\nselect * from sip_foo;\n' | sqlite3 database.sqlite | less -S줄 바꿈없이 한 줄에 한 행을 가져야했습니다.
Rob W

5
그러나 .width열을 넓히려 면 명령을 사용해야 할 수도 있습니다 . 그렇지 않으면 콘텐츠가 시각적으로 잘립니다.
mlissner

.separator ROW "\n"행을 줄 바꿈으로 구분하도록 을 추가 할 수도 있습니다 . 내 것이 아니고 출력을 읽을 수 없었습니다.
Boxuan

3
~/.sqliterc매번 수동으로 수행하지 않으려는 경우 파일에 추가 할 수 있습니다 .
ijoseph

9

명령 행에서 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

1
열 너비를 설정하는 옵션은 없지만 다음 해결 방법이 가능합니다. echo -e ".headers on \n.mode column \n.width 10 20 500 \n select * from MyTable" | sqlite3 <dbfile>— 명령을 stdin으로 보냅니다.
ruvim

귀하의 오류가 ".headers on\n.mode column\netc 대신 세미콜론을 사용하고 있다고 생각합니다
deed02392

9

모든 답변은 SQLite 콘솔 또는 CLI를 통해 입력 할 수있는 설정을 제공하지만, 항상 입력하지 않아도 RC 파일에 이러한 설정을 적용 할 수 있다는 언급은 없습니다. 이것을 다음과 같이 저장하십시오 ~/.sqliterc:

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

참고 기본 빈 문자열 대신 null 값에 대한 자리 표시자를 추가했습니다.


2

나는 항상 사용

.mode line

MySQL의 \G수정 자 와 유사하게 쿼리 결과를 세로로 인쇄합니다 .


1

내가 아직 언급 할 수없는 것처럼 ... Mat와 mlissner가 이미 제공 한 큰 대답 외에도 어떤 경우에도 열의 내용이 잘린 경우 sqlite 셸에 올바른 형식을 지정한 후 (사용 .mode column.headers on위에서 언급 한 바와 같이) )를 사용 .explain하면 열의 전체 내용이 표시되도록 사용할 수도 있습니다 .

이 명령의 유일한 단점은 열 헤더는 다음 사용할 수 있습니다 (시각적 시나리오에서), 축소하여 제대로 읽기되지 않고 출력이 매우 지저분 수 있다는 것입니다 .explain off이전 형식으로 돌아가 더 "인간으로보기 다시 읽을 수있는 "형식입니다.

이 접근 방식은 출력 포맷터 명령과 함께 사용하거나 데이터베이스 / 열의 전체 데이터를 볼 수있는 임시 솔루션으로 사용할 .width수 있습니다. 이를 사용 하면 전체 출력을 얻기 위해 항상 정확한 수의 문자를 제공해야합니다. 열의 데이터

출력 형식 변경에 대한 자세한 내용은 기본 CLI 설명서를 참조하십시오.

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


1

내 줄 바꿈이없는 지저분한 것처럼 보였습니다. @Boxuan의 댓글

행이 줄 바꿈으로 구분되도록 .separator ROW "\ n"을 추가 할 수도 있습니다. 내 것이 아니고 출력을 읽을 수 없었습니다. – Boxuan 5 월 11 일 15:08

그것으로도 문제가 해결되었습니다.여기에 이미지 설명을 입력하십시오


1
어떤 시스템을 사용하고 있습니까? macOS에서는 그런 문제가 없습니다
ospider

1

.mode tabs편리하게 사용할 수 있습니다 .

sqlite> select * from user;
name    age
Bob     18
Ali     19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.