ठीक से साइक्लाइट शेल आउटपुट को कैसे प्रारूपित करें?


77

अगर मैं जाऊं 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 ग्राहक)

वास्तव में कस्टम आउटपुट स्वरूप: stackoverflow.com/questions/23120906/…
Ciro Santilli 新疆 stack stack stack

जवाबों:


111

"मानव पठनीय" आउटपुट के लिए, आप 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वर्ड-रैप के बिना प्रति पंक्ति एक पंक्ति प्राप्त करने के लिए उपयोग करना था ।
रोब डब्ल्यू

5
हालाँकि, नोट करें कि .widthआपको कॉलम को व्यापक बनाने के लिए कमांड का उपयोग करने की आवश्यकता हो सकती है । अपनी सामग्री को नेत्रहीन काट दिया जाएगा।
23

आप जोड़ना भी चाह सकते हैं .separator ROW "\n", ताकि पंक्तियाँ लाइन ब्रेक द्वारा अलग हो जाएं। मेरा नहीं था, और आउटपुट अपठनीय था।
बॉक्सुआन

3
~/.sqlitercयदि आप मैन्युअल रूप से हर बार ऐसा नहीं करना चाहते हैं तो आप इसे अपनी फ़ाइल में जोड़ सकते हैं ।
जोजफ

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 और -derder का उपयोग करना होगा:

$ 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>- यानी, स्टैड को कमांड भेजें।
रुविम

मुझे लगता है कि आपकी त्रुटि ".headers on\n.mode column\nआदि के बजाय अर्धविराम का उपयोग कर रही थी
deed02392

9

सभी उत्तर सेटिंग प्रदान करते हैं जो आप SQLite कंसोल या CLI के माध्यम से टाइप कर सकते हैं, लेकिन किसी को भी यह उल्लेख नहीं है कि इन सेटिंग्स को हर समय टाइप करने से बचने के लिए RC फाइल में डाला जा सकता है। इसे इस रूप में सहेजें ~/.sqliterc:

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

नोट मैंने डिफ़ॉल्ट रिक्त स्ट्रिंग के बजाय रिक्त मानों के लिए एक प्लेसहोल्डर भी जोड़ा है।


2

मैं हमेशा उपयोग करता हूं

.mode line

MySQL के \Gसंशोधक के समान, जो क्वेरी को लंबवत परिणाम देता है ।


1

जैसा कि मैं अभी तक टिप्पणी नहीं कर सकता ... पहले से ही मैट और mlissner द्वारा प्रदान किए गए महान जवाबों के अलावा, अगर किसी भी मामले में एक कॉलम की सामग्री को काट दिया जाता है, तो स्क्लेलाइट शेल को सही प्रारूप देने के बाद (उपयोग .mode columnऔर .headers onजैसा कि ऊपर कहा गया है) ), .explainएक स्तंभ की पूरी सामग्री को दिखाने के लिए उपयोग करने की संभावना भी है।

इस आदेश के लिए केवल नकारात्मक पक्ष यह है कि कॉलम हेडर सिकुड़ते हैं, इस प्रकार उन्हें ठीक से नहीं पढ़ा जा सकता है और आउटपुट काफी गड़बड़ हो सकता है (एक दृश्य परिदृश्य में), फिर आप .explain offपिछले प्रारूप में लौटने और इसे अधिक "मानव" के साथ देखने के लिए उपयोग कर सकते हैं पठनीय "प्रारूप एक बार फिर।

इस दृष्टिकोण का उपयोग आउटपुट फॉर्मेटर्स कमांड के साथ संयोजन के रूप में किया जा सकता है, और डेटाबेस / कॉलम के पूर्ण डेटा को देखने के लिए एक अस्थायी समाधान के रूप में, जैसा कि .widthआप का उपयोग हमेशा पूर्ण आउटपुट प्राप्त करने के लिए वर्णों की सटीक संख्या देना होता है। स्तंभ का डेटा।

आउटपुट स्वरूप बदलने के बारे में अधिक जानकारी के लिए, डिफ़ॉल्ट CLI प्रलेखन का एक त्वरित संदर्भ:

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


1

मेरा ऐसा लग रहा था जैसे कोई लाइन नहीं टूटी हो। @Boxuan टिप्पणी पर

आप .separator ROW "\ n" भी जोड़ना चाह सकते हैं, ताकि पंक्तियों को लाइन ब्रेक द्वारा अलग किया जा सके। मेरा नहीं था, और आउटपुट अपठनीय था। - बॉक्सुआन 11 मई को 15:08 बजे

इसके साथ ही मेरा मुद्दा भी तय कियायहाँ छवि विवरण दर्ज करें


1
आप किस सिस्टम का उपयोग कर रहे हैं?
macOS

1

आप .mode tabsसुविधा के लिए उपयोग कर सकते हैं ।

sqlite> select * from user;
name    age
Bob     18
Ali     19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.