ATTACH के साथ खोली गई SQLite डेटाबेस फ़ाइल में तालिकाओं को कैसे सूचीबद्ध किया जाए?


1197

SQL को तालिकाओं और उन पंक्तियों के भीतर की पंक्तियों को SQLite डेटाबेस फ़ाइल में सूचीबद्ध करने के लिए क्या इस्तेमाल किया जा सकता है - एक बार मैंने इसे SQLite 3 कमांड लाइन टूल ATTACHपर कमांड के साथ संलग्न किया है ?


1
इसे आज़माएँ, आपको तालिकाओं की पूरी जानकारी मिल गई है http://www.sqlite.org/pragma.html#schema
पीयूष

2
निम्नलिखित में से यदि आप रुचि रखते हैं तो sqlite के लिए एक उपयोगी GUI है: sqlitestudio.pl आपको डेटाबेस, तालिकाओं के विवरण देखने के लिए एक्सेस देता है, बहुत जल्दी और एक अच्छा क्वेरी संपादक भी है ...
जेम्स ओर्वेक

17
.tablesतालिका के लिए और .schema ?TABLE?विशिष्ट तालिका के स्कीमा के लिए।
एच 6।

.table 'bank_%'या .table '%_empl'उपसर्गों / प्रत्ययों को क्वेर करने के लिए वैध वाक्यविन्यास भी!
गवेंको

जवाबों:


576

.tables, और .schema"सहायक" कार्यों संलग्न डेटाबेस में मत देखो: वे सिर्फ क्वेरी SQLITE_MASTER"मुख्य" डेटाबेस के लिए तालिका। नतीजतन, अगर आपने इस्तेमाल किया

ATTACH some_file.db AS my_db;

फिर आपको करने की आवश्यकता है

SELECT name FROM my_db.sqlite_master WHERE type='table';

ध्यान दें कि अस्थायी तालिकाएँ .tablesया तो दिखाई नहीं देती हैं: आपको उसके लिए सूची sqlite_temp_masterबनानी होगी:

SELECT name FROM sqlite_temp_master WHERE type='table';

121
केवल "SELECT name FROM sqlite_master WHERE type='table'"मेरे लिए काम करता है
vladkras

3
My_db.sqlite_master से चयन करें नाम कहाँ = 'तालिका'; इस (संलग्न DB के लिए) मेरे लिए काम नहीं करता है और यह रूप में त्रुटि फेंकता है: ऐसी कोई तालिका मौजूद "my_db.sqlite_master"
कनिका

अस्थायी तालिकाओं से आपका क्या तात्पर्य है? क्या कोई है जब मैंने अभी SQLite db फ़ाइल खोली है?
इवोक

अस्थाई टेबल CREATE TEMPORARY TABLESQL कमांड के साथ बनाई गई हैं । वर्तमान डेटाबेस कनेक्शन बंद होने पर उनकी सामग्री हटा दी जाती है, और उन्हें डेटाबेस फ़ाइल में कभी नहीं सहेजा जाता है।
एंथनी विलियम्स

1
Sqlite3 कमांड मोड और रन ATTACH "some_file.db" AS my_db; इट के तहत काम किया!
John_J

1272

SQLite डेटाबेस में तालिकाओं को देखने के लिए कुछ चरण हैं:

  1. अपने डेटाबेस में तालिकाएँ सूचीबद्ध करें:

    .tables
  2. सूची कैसी दिखती है:

    .schema tablename
  3. संपूर्ण तालिका प्रिंट करें:

    SELECT * FROM tablename;
  4. उपलब्ध SQLite प्रॉम्प्ट कमांड के सभी सूची:

    .help

45
.tableऔर .tablesदोनों की अनुमति है। उस मामले के लिए, .taयह भी काम करेगा, क्योंकि sqlite3 किसी भी आदेश को स्वीकार करेगा जो कि असंदिग्ध है। सहायता के अनुसार कमांड का नाम वास्तव में ".tables" है (यदि कोई अभी भी ध्यान दे रहा है)।
dbn

29
(यह स्वीकृत उत्तर होना चाहिए, यह चीजों को करने के लिए सबसे अधिक स्केलाइट-वाई तरीका है)।
dbn

6
.tablesयदि एक के माध्यम से डेटाबेस खोला गया तो तालिकाओं को प्रदर्शित नहीं किया जाएगा ATTACH '<path>' AS <name>;लेकिन लेज़ का जवाब क्या होगा। चूंकि ओपी ने एटीटचिंग का उल्लेख किया है, मेरा मानना ​​है कि वह इस उत्तर को स्वीकार नहीं करने के लिए सही था। संपादित करें: बस देखा कि एंथोनी और नीचे के अन्य लोगों ने भी इसे इंगित किया।
एंटीप्लेक्स

2
@ डब्लूवी: जरूरी नहीं। विचार करें कि आप SQLite या MySql (मेरा मामला) का उपयोग करने में सक्षम डीबी आवरण कर रहे हैं। अधिक SQL-अनुरूप आदेशों का उपयोग करने से अन्य भाषाओं में लिपटे पोर्ट को करना आसान होगा, यदि आप DB- विक्रेता विशिष्ट आदेशों का उपयोग करेंगे।
वैलेंटाइन हेनित्ज

"... sqlite3 किसी भी आदेश को स्वीकार करेगा जो कि अस्पष्ट है ..." दुर्भाग्य से कभी-कभी यह अस्पष्ट आज्ञाओं को भी स्वीकार करता है। उदाहरण के लिए, ".s" की व्याख्या ".show" के रूप में की जाती है, भले ही ".schema", ".separator", या ".stats" भी संभावनाएं हों। और जब यह अस्पष्ट आदेश स्वीकार नहीं करता है, तो यह संभावनाओं की सूची नहीं है।

442

ऐसा प्रतीत होता है कि आपको sqlite_master तालिका के माध्यम से जाने की आवश्यकता है :

SELECT * FROM dbname.sqlite_master WHERE type='table';

और फिर मैन्युअल रूप से SELECTपंक्तियों को देखने के लिए एक या समान के साथ प्रत्येक तालिका के माध्यम से जाना ।

.DUMPऔर .SCHEMAआदेश सभी पर डेटाबेस को देखने के लिए प्रकट नहीं होता।


120
भविष्य में उपयोग के लिए पढ़ना या याद रखना आसान नहीं है; निर्मित .tablesकमांड अधिक सहज है

24
@Gryllida: इसके बावजूद यह किसी भी SQL-API से प्रयोग करने योग्य है क्योंकि यह वैलिड SQL है। अंतर्निहित आदेश हर जगह समर्थित नहीं हो सकते हैं।
वैलेंटाइन हेनित्ज

2
@DoktorJ .tablesसंलग्न डेटाबेस से तालिकाओं को प्रदर्शित करने के लिए संशोधित किया गया है?
लास वी। कार्लसन

4
उस डेटाबेस में , हाँ, लेकिन यह सवाल आपके द्वारा संलग्न डेटाबेस में तालिकाओं को दिखाने के बारे में था। क्या उन्हें भी .tablesदिखाने के लिए कमांड को संशोधित किया गया है?
लास वी। कार्लसन

4
रवींद्र! समझ पढ़ना विफल ... मैं किसी भी तरह ATTACH संदर्भ को पकड़ने में कामयाब नहीं रहा ... दो बार> _ <
Doktor J

162

सभी तालिकाओं को दिखाने के लिए, उपयोग करें

SELECT name FROM sqlite_master WHERE type = "table"

सभी पंक्तियों को दिखाने के लिए, मुझे लगता है कि आप सभी तालिकाओं के माध्यम से पुनरावृत्ति कर सकते हैं और प्रत्येक पर एक चयन * कर सकते हैं। लेकिन हो सकता है कि एक DUMP जो आप के बाद हो?


16
एकमात्र उत्तर के लिए धन्यवाद जो वास्तव में प्रश्न को संबोधित करता है ... "क्या एसक्यूएल", न कि क्या कमांड का उपयोग किया जा सकता है ... धन्यवाद!
ब्रैड पार्क

इसके अलावा, यह प्रति पंक्ति एक तालिका नाम प्रिंट करता है, जबकि .tables तालिका नामों के कई कॉलम प्रिंट करता है (कष्टप्रद / उपयोगी नहीं)।
शेन

68

.helpउपलब्ध आदेशों के लिए जाँच करने के लिए उपयोग करें ।

.table

यह आदेश आपके वर्तमान डेटाबेस के अंतर्गत सभी तालिकाओं को दिखाएगा।


अजीब बात है, यह सही होना चाहिए, लेकिन जब मैं इसका उपयोग करता हूं तो काम नहीं करता है
जुरगेन के।

42

SQLite कमांड लाइन पर इसके लिए एक कमांड उपलब्ध है:

.tables ?PATTERN?      List names of tables matching a LIKE pattern

जो निम्न SQL में कनवर्ट करता है:

SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1

36

तालिकाओं को सूचीबद्ध करने के लिए आप यह भी कर सकते हैं:

SELECT name FROM sqlite_master
WHERE type='table';

तो ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")या नहीं? यह मेरे लिए काम नहीं कर रहा है, लेकिन मुझे यकीन नहीं है कि यह कोड कहां चलाया जाएगा।
jbuddy_13

32

Http://www.sqlite.org/pragma.html#schema आज़माएंPRAGMA table_info(table-name);


2
यह शायद इसे करने का सबसे अच्छा तरीका है।
एलिक्स एक्सल

7
यह केवल तभी काम करता है जब आप तालिका का नाम जानते हैं। तालिका नामों की सूची प्राप्त करने के लिए आप इसका उपयोग नहीं कर सकते।
एरिक डब्ल्यू

24

मैं इसे प्राप्त करने के लिए इस क्वेरी का उपयोग करता हूं:

SELECT name FROM sqlite_master WHERE type='table'

और iOS में उपयोग करने के लिए:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];

16

प्रलेखन के अनुसार , MySQLs का समकक्ष SHOW TABLES;है:

".Tables" कमांड सूची मोड को सेट करने के समान है फिर निम्नलिखित क्वेरी को निष्पादित करता है:

SELECT name FROM sqlite_master
  WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
  WHERE type IN ('table','view')
ORDER BY 1;

हालाँकि, यदि आप जाँच कर रहे हैं कि क्या कोई एकल तालिका मौजूद है (या उसका विवरण प्राप्त करने के लिए), तो @LuizGeron उत्तर देखें ।


15

SQLite 3 के नवीनतम संस्करण आप जारी कर सकते हैं:

.fullschema

अपने सभी बयान देखने के लिए।


SQLite संस्करण 3.7.13 2012-07-17 17:46:21 ".help" निर्देशों के लिए दर्ज करें "" के साथ समाप्त किए गए SQL कथन दर्ज करें; sqlite> .fullschema त्रुटि: अज्ञात आदेश या अमान्य तर्क: "fullschema"। मदद के लिए ".help" दर्ज करें
मोना जलाल

2
आप 2012 से एक संस्करण का उपयोग कर रहे हैं
काली मिर्च

12

इसका सबसे आसान तरीका यह है .dumpकि आप SQLite 3 शेल टूल को इनवाइट करने के बजाय इसे सीधे डेटाबेस को खोलें और कमांड का उपयोग करें ।

तो ... (मान लें कि आपका OS कमांड लाइन प्रॉम्प्ट $ है) इसके बजाय $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

अपने OS कमांड लाइन से, डेटाबेस को सीधे खोलें:

$sqlite3 database.sqlite
sqlite3> .dump

10

एक के माध्यम से union all, सभी तालिकाओं को एक सूची में संयोजित करें।

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'


7

चूंकि किसी ने भी SQLite के आधिकारिक संदर्भ के बारे में उल्लेख नहीं किया है, मुझे लगता है कि इस शीर्षक के तहत इसे संदर्भित करना उपयोगी हो सकता है:

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

आप इस लिंक में वर्णित कमांड्स का उपयोग करके अपने डेटाबेस में हेरफेर कर सकते हैं। इसके अलावा, यदि आप विंडोज ओएस का उपयोग कर रहे हैं और यह नहीं जानते कि कमांड शेल कहां है, तो यह SQLite साइट में है:

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

इसे डाउनलोड करने के बाद, SQLite कमांड शेल को इनिशियलाइज़ करने के लिए sqlite3.exe फ़ाइल पर क्लिक करें । जब इसे प्रारंभ किया जाता है, तो डिफ़ॉल्ट रूप से यह SQLite सत्र इन-मेमोरी डेटाबेस का उपयोग कर रहा है, डिस्क पर फ़ाइल नहीं, और इसलिए सत्र से बाहर निकलने पर सभी परिवर्तन खो जाएंगे। डेटाबेस के रूप में एक निरंतर डिस्क फ़ाइल का उपयोग करने के लिए, टर्मिनल विंडो शुरू होने के तुरंत बाद ".open ex1.db" कमांड दर्ज करें।

ऊपर दिए गए उदाहरण के कारण "ex1.db" नाम की डेटाबेस फ़ाइल को खोला और इस्तेमाल किया जा सकता है, और यदि यह पहले से मौजूद नहीं है तो बनाई गई है। आप यह सुनिश्चित करने के लिए एक पूर्ण पथनाम का उपयोग करना चाह सकते हैं कि फ़ाइल उस निर्देशिका में है जिसे आप सोचते हैं कि यह है। आगे-स्लेश का उपयोग निर्देशिका विभाजक वर्ण के रूप में करें। दूसरे शब्दों में "c: /work/ex1.db" का उपयोग करें, न कि "c: \ work \ ex1.db" का।

आपके द्वारा पहले चुने गए डेटाबेस में सभी तालिकाओं को देखने के लिए, कमांड टाइप करें। टेबल्स जैसा कि ऊपर दिए गए लिंक में कहा गया है।

यदि आप Windows में काम करते हैं, तो मुझे लगता है कि इस sqlite.exe फ़ाइल को अन्य पायथन फ़ाइलों के साथ उसी फ़ोल्डर में ले जाना उपयोगी हो सकता है। इस तरह, पायथन फ़ाइल को लिखता है और SQLite शेल .db फ़ाइलों से पढ़ता है उसी पथ में हैं।


5

".Schema" कमांडो उपलब्ध तालिकाओं और उनकी पंक्तियों को सूचीबद्ध करेगा, जो आपको बताए गए सारणी बनाने के लिए उपयोग किए गए विवरण को दिखाएगा:

sqlite> table_a (id int, a int, b int) बनाएं;
साइक्लाइट> .schema table_a
टेबल टेबल_ए (आईडी इंट, एक इंट, बी इंट);

1

.da सभी डेटाबेस को देखने के लिए - जिसे ' मुख्य ' कहा जाता है

इस डेटाबेस की तालिकाओं द्वारा देखा जा सकता है

1 से sqlite_master आदेश से अलग tbl_name का चयन करें;

संलग्न डेटाबेस को उपसर्गों की आवश्यकता होती है जिन्हें आपने कथन में AS के साथ चुना है जैसे कि ( जैसे , बी.बी.सी., cc ...):

1 से aa.sqlite_master ऑर्डर से अलग tbl_name का चयन करें ;

ध्यान दें कि यहां आपको विचार भी मिलते हैं। इन्हें जोड़ने के लिए जहां 'आदेश' से पहले टाइप = 'तालिका' जोड़ें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.