SQLite कमांड-लाइन शेल के भीतर से डेटाबेस फ़ाइल खोलना


92

मैं SQLite कमांड लाइन शेल का उपयोग कर रहा हूं । दस्तावेज के रूप में, मैं निष्पादन योग्य के लिए एक तर्क के रूप में आपूर्ति करके एक डेटाबेस खोल सकता हूं:

sqlite3 data.db

मैं कमांड-लाइन तर्क (यदि मैं कहता हूं, तो विंडोज में डबल क्लिक करें sqlite3.exe) के रूप में फाइल की आपूर्ति किए बिना इसे लागू करने के बाद टूल के भीतर से डेटाबेस फ़ाइल खोलने का तरीका समझ नहीं सकता । डेटाबेस फ़ाइल निर्दिष्ट करने के लिए SQLite शेल टूल के भीतर कमांड क्या है?

जवाबों:


112

आप एक और एक से अधिक डेटाबेस संलग्न कर सकते हैं और उसी तरह से काम कर सकते हैं जैसे कि sqlite dbname.db का उपयोग कर रहे हैं

sqlite3
:
sqlite> attach "mydb.sqlite" as db1;

और आप। डेटाबेस के साथ सभी संलग्न डेटाबेस देख सकते हैं

जहां सामान्य तरीके से कमांड-लाइन db के लिए मुख्य का उपयोग किया जाता है

.databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main                                                                       
1    temp                                                                       
2    ttt              c:\home\user\gg.ite                                   

14
आह! धन्यवाद। मैं यह निर्दिष्ट करूं कि मैं अपने प्रश्नों को चलाने के लिए किस डेटाबेस को साइक्लाइट चाहिए?
नोलन एमी

क्या बिना निर्मित किए एक अस्थायी डेटासेट का उभरना सामान्य है?

आप डेटाबेस नाम के साथ तालिका का नाम उपसर्ग करके डेटाबेस निर्दिष्ट करते हैं। उपसर्ग से ऊपर के उदाहरण में "db1" होगा, इसलिए जैसेSELECT * FROM db1.tbl1;
Bugmenot123

20

मुझे लगता है कि केवल एक ही डेटाबेस खोलने और क्वेरी शुरू करने का सबसे सरल तरीका है:

sqlite> .open "test.db"
sqlite> SELECT * FROM table_name ... ;

सूचना: यह केवल 3.8.2+ संस्करणों के लिए काम करता है


11

डेटाबेस खोलने के लिए Sqlite शेल के भीतर कमांड .open है

वाक्य रचना है,

sqlite> .open dbasename.db

यदि यह एक नया डेटाबेस है जिसे आप बनाना और खोलना चाहेंगे, तो यह है

sqlite> .open --new dbasename.db

यदि डेटाबेस एक अलग फ़ोल्डर में मौजूद है, तो पथ का उल्लेख इस तरह किया जाना चाहिए:

sqlite> .open D:/MainFolder/SubFolder/...database.db

विंडोज कमांड शेल में, आपको एक निर्देशिका का प्रतिनिधित्व करने के लिए '\' का उपयोग करना चाहिए, लेकिन SQLite निर्देशिकाओं में '/' द्वारा दर्शाया जाता है। यदि आप अभी भी विंडोज नोटेशन का उपयोग करना पसंद करते हैं, तो आपको हर '\' के लिए एक एस्केप सीक्वेंस का उपयोग करना चाहिए


9

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

select * from ttt.table_name;

या यदि सभी संलग्न डेटाबेस में तालिका का नाम अद्वितीय है

select * from my_unique_table_name;

लेकिन मुझे लगता है कि साइक्लाइट-शेल का होना केवल मैनुअल लुकअप या मैनुअल डेटा हेरफेर के लिए है और इस तरह से अधिक असंगत है

आम तौर पर आप स्क्रिप्ट में sqlite- कमांड-लाइन का उपयोग करेंगे


क्या यह संभव है कि एक चयनित बयान हो जो सभी संलग्न डेटाबेस से रिकॉर्ड प्राप्त करता है, मामले में तालिका का नाम संलग्न डेटाबेस में समान है?
user826955

5

आप बस कमांड लाइन में डेटाबेस फ़ाइल का नाम निर्दिष्ट कर सकते हैं:

bash-3.2 # sqlite3 UserDb.sqlite
SQLite version 3.16.2 2017-01-06 16:32:41
Enter ".help" for usage hints.

sqlite> .databases
main: /db/UserDb.sqlite

sqlite> .tables
accountLevelSettings  genres               syncedThumbs
collectionActivity    recordingFilter      thumbs
contentStatus         syncedContentStatus 

sqlite> select count(*) from genres;
10

इसके अलावा, आप कमांड लाइन से अपनी क्वेरी निष्पादित कर सकते हैं:

bash-3.2 # sqlite3 UserDb.sqlite 'select count(*) from genres'
10

आप SQLite शेल से एक और डेटाबेस फ़ाइल संलग्न कर सकते हैं:

sqlite> attach database 'RelDb.sqlite' as RelDb;

sqlite> .databases
main: /db/UserDb.sqlite
RelDb: /db/RelDb_1.sqlite

sqlite> .tables
RelDb.collectionRelationship  contentStatus               
RelDb.contentRelationship     genres                      
RelDb.leagueRelationship      recordingFilter             
RelDb.localizedString         syncedContentStatus         
accountLevelSettings          syncedThumbs                
collectionActivity            thumbs                      

इस 2 डेटाबेस से तालिकाओं डेटाबेस के उपसर्ग के माध्यम से सुलभ हो जाएगा:

sqlite> select count(*) from RelDb.localizedString;
2442

लेकिन कौन जानता है कि कमांड लाइन से क्वेरी को निष्पादित करने के लिए कमांड लाइन से कई डेटाबेस फ़ाइलों को कैसे निर्दिष्ट किया जाए?


2
create different db files using
      >sqlite3 test1.db
sqlite> create table test1 (name text);
sqlite> insert into test1 values('sourav');
sqlite>.exit
      >sqlite3 test2.db
sqlite> create table test2 (eid integer);
sqlite> insert into test2 values (6);
sqlite>.exit
      >sqlite
SQLite version 3.8.5 2014-06-04 14:06:34
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open test1.db
sqlite> select * from test1;
sourav
sqlite> .open test2.db
sqlite> select * from test1;
Error: no such table: test1
sqlite> select * from test2;
6
sqlite> .exit
      >

Thank YOU.

2

पुराने SQLite कमांड-लाइन के गोले ( sqlite3.exe) .openकमांड या किसी भी आसानी से पहचाने जाने योग्य विकल्प की पेशकश करने के लिए प्रकट नहीं होते हैं ।

हालांकि मुझे कोई निश्चित संदर्भ नहीं मिला, ऐसा लगता है कि .openकमांड को संस्करण के आसपास पेश किया गया था 3.15 केSQLite रिलीज इतिहास पहले उल्लेख .open2016/10/14 (3.15.0) के साथ आदेश।


1

मुझे आश्चर्य है कि कोई भी वास्तव में पूछे गए प्रश्न को प्राप्त करने में सक्षम क्यों नहीं था। इसमें कहा गया है कि डेटाबेस फाइल को निर्दिष्ट करने के लिए SQLite शेल टूल के भीतर क्या कमांड है?

मेरी हार्ड डिस्क पर एक sqlite db है E:\ABCD\efg\mydb.db । मैं इसे sqlite3 कमांड लाइन इंटरफेस के साथ कैसे एक्सेस कर सकता हूं? .open E:\ABCD\efg\mydb.dbकाम नहीं करता। यही प्रश्न पूछा गया।

मुझे काम करने का सबसे अच्छा तरीका मिला

  • अपने सभी db फ़ाइलों को 1 डायरेक्टरी में कॉपी-पेस्ट करें (कहें) E:\ABCD\efg\mydbs )
  • अपनी कमांड लाइन में उस डायरेक्टरी पर जाएँ
  • अब खुला sqlite3और फिर.open mydb.db

इस तरह आप अलग-अलग डेटाबेस से संबंधित अलग-अलग टेबलों पर ऑपरेशन में शामिल हो सकते हैं ।


क्या आपने E:पहले प्रयास किया है ? अक्सर बार विंडोज खुद को पत्र बदलने के बिना अन्य ड्राइव पर निर्देशिकाओं को संदर्भित करना पसंद नहीं करता है।
एरोन फ्रेंके

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