2013-02-15 48 views
6

पायथन कोडिंग के +20 घंटों और कमांड लाइन के साथ नौसिखिया परिचितता के साथ एक शुरुआत प्रोग्रामर के रूप में, मैंने ज़ेड शॉ के "एसक्यूएल द हार्ड वे" सीख लिया और जल्दी से स्टंप हो गया।एसक्यूएल सीखें हार्ड तरीका - SQL लाइट 3 में .db के साथ .sql बनाना - क्यों और कैसे?

exercise 01 में, जेड आप इस पहले आदेश के साथ अपनी पहली तालिका बनाने के होते हैं:

sqlite3 ex1.db < ex1.sql 

हालांकि यह त्रुटि संदेश दे रही है मेरी कमांड लाइन में चलाने के लिए विफल रहता है, "-bash: ex1.sql: ऐसी कोई फ़ाइल या डायरेक्टरी नहीं है।" प्रारंभ में, मैं इस कोड की सिफारिश को नजरअंदाज कर दिया और साथ रवाना हुए:

sqlite3 ex1.db 
SQLite version 3.7.15.1 2012-12-19 20:39:10 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> CREATE TABLE person (
    ...>  id INTEGER PRIMARY KEY, 
    ...>  first_name TEXT, 
    ...>  last_name TEXT, 
    ...>  age INTEGER 
    ...>); 

चल रहा कमांड लाइन में "एल ls" पता चलता है:

-rw-r--r-- 1 thefifth staff 2048 Feb 15 15:23 ex1.db 

लेकिन क्या मैं चाहता हूँ और प्राप्त करने में नाकाम रहने रहा हूँ:

$ ls -l 
-rw-r--r-- 1 zedshaw staff 2048 Nov 8 16:18 ex1.db 
-rw-r--r-- 1 zedshaw staff 92 Nov 8 16:14 ex1.sql 

मैं चारों ओर Google पर और this blog है कि एक ही "name.db < name.sql" वाक्य रचना को लागू करता है, लेकिन कोड के साथ निम्नलिखित यहाँ या तो मेरे लिए काम नहीं किया पाया। यह Stack Overflow भी एक समान वाक्यविन्यास है, लेकिन .sql से sqlite3 को परिवर्तित करने के संदर्भ में।

विशेष रूप से, मुझे आश्चर्य है कि यह मूल बैश टर्मिनल में उपयोग के लिए "<" है, और मैं इसके सही उपयोग के लिए कुछ मानदंडों को पूरा करने में विफल रहा हूं। इसके अलावा, मुझे एक .sql और .db फ़ाइल बनाने का उद्देश्य पता नहीं है, हालांकि स्पष्ट रूप से एक दूसरे की तुलना में बहुत छोटा है। शायद मैंने sqlite3 को गलत तरीके से स्थापित किया है, लेकिन ऐसा लगता है कि यह ठीक काम कर रहा है।

आपकी मदद के लिए धन्यवाद!

उत्तर

6
  1. अपने कोड तो टर्मिनल में .sql
  2. एक्सटेंशन वाली फ़ाइल में सहेजें sqlite3 ex1.db < ex1.sql के लिए एक ex1.db
  3. Ter में डाल बनाने minal: sqlite3 ex1.db .schema
  4. या डाल: sqlite3 ex1।डीबी [... और फिर ....] .chechema
+0

दो प्रतिक्रियाओं में से, यह उत्तर ज़ेड के उत्तर जैसा दिखता है, हालांकि 2048 फ़ाइल किसी भी तरह से .dv प्रारूप के रूप में बनाई गई थी, कम से कम यह डेटाबेस प्रारूप में थी। धन्यवाद! – surrealdetective

10
sqlite3 ex1.db < ex1.sql 

उपरोक्त काम करने के लिए, ex1.sql पहले से मौजूद होना चाहिए। < एक इनपुट है जो इनपुट पुनर्निर्देशन के लिए गोले में उपयोग किया जाता है। sqlite3 यहां एक नया या मौजूदा डेटाबेस (यह आवश्यकतानुसार डेटाबेस बनाएगा) के साथ शुरू किया गया है, और ex1.sql से एसक्यूएल स्टेटमेंट प्राप्त करता है, उन्हें निष्पादित करता है और तदनुसार ex1.db संशोधित करता है।

अब ex1.db से ex1.sql, जो आप जाहिरा तौर पर क्या करना चाहते हैं उत्पन्न करते हैं:

sqlite3 ex1.db .dump > ex1.sql 

हम फिर से खोल पुनर्निर्देशन सुविधा का उपयोग, अब ex1.sql को उत्पादन पुनः निर्देशित। टेबल निर्मित और INSERT साथ भर जाते हैं, आदि

अब आप चरण 1 पर जा सकते हैं:

sqlite3 ex1copy.db < ex1.sql 
.dump आदेश sqlite SQL कथन है कि इसी तरह डेटाबेस पुन: बनाने जाएगा, जब वे एक खाली डेटाबेस में क्रियान्वित कर रहे हैं लिखने बनाता है
+0

स्पष्ट प्रतिक्रिया के लिए धन्यवाद! पूरी तरह से सहायक। – surrealdetective

2

मैं आज भी एक ही समस्या में भाग गया, और आप की तरह मैं सोच रहा था कि मेरा आदेश क्यों काम नहीं कर रहा है। जैसा ऊपर बताया गया है लेखक मानते हैं कि आप टेक्स्ट एडिटर में प्रारंभिक कमांड बनाते हैं और एक .sql फ़ाइल के रूप में सहेजते हैं। और फिर ex1.db < ex1.sql कमांड फ़ाइल को .db फ़ाइल में परिवर्तित करता है।