मैं SQLite डेटाबेस के लिए तालिका में स्तंभों की सूची कैसे प्राप्त कर सकता हूं?


102

मैं एक तालिका में स्तंभों की सूची प्राप्त करना चाह रहा हूं। डेटाबेस SQLite (3.6, मेरा मानना ​​है) की नवीनतम रिलीज़ है। मैं एक ऐसे कोड की तलाश में हूं जो SQL क्वेरी के साथ ऐसा करता है। कॉलम से संबंधित मेटाडेटा के लिए अतिरिक्त बोनस अंक (जैसे लंबाई, डेटा प्रकार, आदि ...)

जवाबों:


134

आप जो खोज रहे हैं उसे डेटा डिक्शनरी कहा जाता है। Sqlite में sqlite_master टेबल (या दृश्य?) को क्वेरी करके सभी तालिकाओं की एक सूची पाई जा सकती है।

sqlite> create table people (first_name varchar, last_name varchar, email_address varchar);
sqlite> select * from sqlite_master;
table|people|people|2|CREATE TABLE people (first_name varchar, last_name varchar, email_address varchar)

स्तंभ जानकारी प्राप्त करने के लिए आप pragma table_info(table_name)कथन का उपयोग कर सकते हैं :

sqlite> pragma table_info(people);
0|first_name|varchar|0||0
1|last_name|varchar|0||0
2|email_address|varchar|0||0

प्राग्म कथनों की अधिक जानकारी के लिए, दस्तावेज देखें ।


5
महान! अब यह कमांड लाइन के बाहर से कैसे किया जाता है? यह मेरे स्वयं के सी कार्यक्रम के भीतर से कैसे किया जाता है?
हारून ब्रेकर

मैं उद्देश्य-सी में ऊपर के रूप में कैसे लागू कर सकता हूं
नाग राज

2
@ नहीं, मुझे लगता है कि SQLite को साधारण SQL के रूप में इन आदेशों का इलाज करना चाहिए, तदनुसार प्रक्रिया करें, और आपको एक परिणाम सेट लौटाएं।
ब्रायन काइल

क्या sqlite के बजाय कुछ डॉट-शॉर्टकट नहीं हैं select * from ?
जिग्गंजर

तालिका से चयन * का उपयोग करते समय, जब आप यह नहीं जानते हैं कि तालिका में रिकॉर्ड कितने रिकॉर्ड हो सकते हैं और समय और पुनरावृत्ति ले सकते हैं। आपको "सीमा 1" या ऐसा कुछ जोड़ना चाहिए।
गाय डैफनी

55

यहाँ सरल तरीका है:

.schema <table>

4
यह वास्तव में उत्तर होना चाहिए।
एहतेश चौधरी

19
@EhteshChoudhury नहीं, ऐसा नहीं होना चाहिए, प्रश्न SQL क्वेरी के लिए पूछता है और यह एक नहीं है।
जैजपीई

25

सवाल पुराना है लेकिन अभी तक इसका उल्लेख नहीं किया गया है।

कई मामलों में एक और सुविधाजनक तरीका हेडर को चालू करना है:

sqlite> .headers on

फिर,

sqlite> SELECT ... FROM table

आउटपुट के शीर्ष पर सभी चयनित फ़ील्ड (यदि आप का चयन करें *) दिखा रहा है तो एक शीर्षक प्रदर्शित करेगा।


मेरा अनुमान सही है कि वास्तविक समस्या यह थी कि sqlite3 डिफ़ॉल्ट रूप से क्वेरी का शीर्षलेख प्रदान नहीं करता है, फिर यही वह समाधान है जिसकी हम सभी को तलाश है । यदि आपकी तालिका आपके टर्मिनल पर प्रदर्शित होने के लिए बहुत लंबी है, तो बस, उदाहरण के लिए, जोड़ें LIMIT 5;अंत में मत भूलना ।
फ्रालाउ

16

बस अपने sqlite खोल में जाओ:

$ sqlite3 path/to/db.sqlite3

और फिर मारा

sqlite> .schema

और आपको सब कुछ मिलेगा।


1
प्रश्न SQL क्वेरी की तलाश में है।
एरिका

13

यहां एक सेलेक्ट स्टेटमेंट दिया गया है जो मौजूदा डेटाबेस के सभी टेबल और कॉलम को सूचीबद्ध करता है:

SELECT m.name as tableName, 
       p.name as columnName
FROM sqlite_master m
left outer join pragma_table_info((m.name)) p
     on m.name <> p.name
order by tableName, columnName
;

धन्यवाद! यदि आप अपने ORDER BYको बदलते हैं तो आप स्कीमा द्वारा ऑर्डर कर सकते हैं tableName, p.cid
mrm

7

यह एक क्वेरी है जो सभी स्तंभों को उनके स्तंभों के साथ सूचीबद्ध करती है, और सभी मेटाडेटा मैं प्रत्येक कॉलम के बारे में ओपी द्वारा अनुरोधित (बोनस अंक के रूप में) प्राप्त कर सकता है।

SELECT
  m.name AS table_name, 
  p.cid AS col_id,
  p.name AS col_name,
  p.type AS col_type,
  p.pk AS col_is_pk,
  p.dflt_value AS col_default_val,
  p.[notnull] AS col_is_not_null
FROM sqlite_master m
LEFT OUTER JOIN pragma_table_info((m.name)) p
  ON m.name <> p.name
WHERE m.type = 'table'
ORDER BY table_name, col_id

मुझे यह दिखाने के लिए @David Garoutte के लिए धन्यवाद कि मुझे pragma_table_infoक्वेरी में कैसे काम करना है।

सभी तालिका मेटाडेटा देखने के लिए यह क्वेरी चलाएँ:

SELECT * FROM sqlite_master WHERE type = 'table'

1

उपरोक्त निर्माण, आप एक ही बार में कर सकते हैं:

sqlite3 yourdb.db ".schema"

यह आपको तालिका बनाने के लिए SQL देगा, जो प्रभावी रूप से स्तंभों की एक सूची है।


0

मुझे पता है, यह एक लंबा समय हो गया है, लेकिन यह कभी भी बहुत देर नहीं हुई है ... मैंने टीसीएल के साथ दुभाषिया के समान सवाल किया था और कई खोज के बाद, मेरे लिए कुछ भी अच्छा नहीं पाया। इसलिए मैंने PRAGMA के आधार पर कुछ प्रस्तावित किया, यह जानते हुए कि आपका DB "मुख्य" है

db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }

और एक सूची प्राप्त करने के लिए सरणी का उपयोग करें

set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.