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




metadata (15)

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


Answers

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

SELECT name FROM sqlite_master WHERE type='table'

और आईओएस में उपयोग करने के लिए:

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

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

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

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

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

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

    .help
    

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

.fullschema

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


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

sqlite> create table_a (id int, a int, b int);
sqlite> .schema table_a
CREATE TABLE table_a (id int, a int, b int);

documentation अनुसार, MySQLs के SHOW TABLES; टैबलेट के बराबर 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 उत्तर देखें।


उपयोग:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"

चूंकि किसी ने 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"।

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

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


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

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump

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

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'

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

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

जो निम्नलिखित एसक्यूएल में परिवर्तित होता है:

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

उपलब्ध कमांड की जांच के लिए .help का उपयोग करें।

.table

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


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

ATTACH some_file.db AS my_db;

तो आपको करने की ज़रूरत है

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

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

SELECT name FROM sqlite_temp_master WHERE type='table';

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

SELECT name FROM sqlite_master WHERE type = "table"

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


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

SELECT name FROM sqlite_master
WHERE type='table';

थोक आवेषण पर

इस पोस्ट से और स्टैक ओवरफ़्लो प्रश्न से प्रेरित हुआ जिसने मुझे यहां ले जाया - क्या SQLite डेटाबेस में एक समय में कई पंक्तियां डालना संभव है? - मैंने अपना पहला Git भंडार पोस्ट किया है:

https://github.com/rdpoor/CreateOrUpdate

जो थोक MySQL , SQLite या PostgreSQL डेटाबेस में ActiveRecords की एक सरणी लोड करता है। इसमें मौजूदा रिकॉर्ड्स को अनदेखा करने, उन्हें ओवरराइट करने या त्रुटि बढ़ाने का विकल्प शामिल है। मेरे प्राथमिक बेंचमार्क अनुक्रमिक लिखने की तुलना में 10x गति सुधार दिखाते हैं - वाईएमएमवी।

मैं इसे उत्पादन कोड में उपयोग कर रहा हूं जहां मुझे अक्सर बड़े डेटासेट आयात करने की आवश्यकता होती है, और मैं इसके साथ बहुत खुश हूं।







sql database sqlite metadata