2010-12-08 10 views
9

से डेटा निर्यात करना मुझे एकाधिक तालिकाओं के SQLite डेटाबेस से डेटा निर्यात करने का एक आसान तरीका चाहिए, फिर उन्हें किसी अन्य डेटाबेस में आयात करें।SQLite 3

यहां मेरा परिदृश्य है। मेरे पास 5 टेबल हैं: ए, बी, सी, डी, ई।

प्रत्येक तालिका में आईडी नामक पहले कॉलम के रूप में प्राथमिक कुंजी होती है। मैं एक यूनिक्स कमांड चाहता हूं जो केवल प्राथमिक कुंजी से पंक्ति में डेटा को किसी प्रारूप में डंप करेगा जिसे किसी अन्य डेटाबेस में आयात किया जा सकता है।

मैं जानता हूँ कि मैं एक

sqlite3 db .dump | grep INSERT 

कर सकते हैं लेकिन यह है कि मुझे तालिका में सभी डेटा देता है। मैं डेटाबेस विशेषज्ञ नहीं हूं, और मैं इसे सभी यूनिक्स कमांड के साथ करने की कोशिश कर रहा हूं जिसमें मैं इसे करने के लिए सी ++ कोड लिखने के बजाय एक शेल स्क्रिप्ट लिख सकता हूं (क्योंकि यही वह है जो लोग मुझे बता रहे हैं कि यह सबसे आसान तरीका है) । मैं केवल एक कार्य पूरा करने के लिए सी ++ कोड लिखने से इनकार करता हूं जो कमांड लाइन से 4-5 कथन में किया जा सकता है।

कोई सुझाव?

+0

बस ध्यान दिया ..... मैंने सभी डेटा का डंप किया और उसी डेटाबेस में आयात करने की कोशिश की। प्राथमिक कुंजी अद्वितीय होना चाहिए। तो मेरी स्क्रिप्ट को अद्वितीय कुंजी बनाने की आवश्यकता होगी? या यदि मैं प्राथमिक कुंजी को बंद कर देता हूं और यह ऑटो-वृद्धि के लिए सेट होता है, तो क्या एक सम्मिलित ऑपरेशन एक अनूठी कुंजी उत्पन्न करेगा? –

+0

इसके अतिरिक्त, तालिका संरचना जहां डेटा आयात किया जाएगा वही होगा, और मुझे अद्वितीय आईडी से जुड़े 5 तालिकाओं से सभी डेटा निर्यात और आयात करना होगा। इसलिए यदि सभी 5 तालिकाओं में डेटा के कॉलम के साथ 1 की अनूठी आईडी है, तो मुझे इसे एक फ़ाइल में निर्यात करने की आवश्यकता है, फिर उसे उसी सिस्टम संरचना में आयात करें जो किसी अन्य सिस्टम पर है (डेटाबेस फाइलें मौजूद होंगी)। –

उत्तर

2

एक ऐसा उपकरण ढूंढने का सुझाव दें जो आपकी क्वेरी और CSV पर निर्यात कर सके। ऐसा लगता है जैसे आप एक स्क्रिप्ट चाहते थे। क्या आप इसका पुन: उपयोग करना और स्वचालित करना चाहते थे?

अन्य परिदृश्यों के लिए, शायद sqlite-manager Firefox plugin पर विचार करें। यह आपके adhoc प्रश्नों को चलाने का समर्थन करता है, और परिणामों को एक CSV में निर्यात करता है। के रूप में आप की जरूरत है हर तालिका के लिए

SELECT ID FROM TableA 

दोहराएँ:

कि भीतर, यह इस बयान दे।

+0

sqlite3 सीएसवी में डंप होगा .... यह मेरी समस्या नहीं है, और मैं किसी तृतीय पक्ष टूल का उपयोग नहीं कर सकता। यह एक बंद प्रणाली है, जिसका उद्देश्य अद्वितीय उपयोगकर्ताओं (पीसी नहीं) के लिए है। सिस्टम यूनिक्स को ओएस के रूप में उपयोग करेगा, इसलिए यूनिक्स कमांड लाइन समाधान खोजने का मेरा प्रयास।मेरा आवश्यक लक्ष्य फ़ाइल कुंजी में प्राथमिक कुंजी के आधार पर निर्यात करना है, फिर उस फ़ाइल को किसी अन्य समान सिस्टम पर ले जाएं और उस डेटाबेस में डेटा आयात करें। –

0

आप SQLite के quote फ़ंक्शन का भी उपयोग कर सकते हैं।

पाठ फ़ाइल और वहाँ बयान निम्नलिखित जगह बनाएं::

.mode insert 
.output insert.sql 
select * from TABLE where STATEMENT; -- place the needed select query here 
.output stdout 

फ़ीड इस फ़ाइल sqlite3 के लिए:

echo "SELECT 'INSERT INTO my_new_table (my_new_key) VALUES (' || quote(my_old_key) || ');' FROM my_old_table;" | sqlite my_table > statements.sql 
+0

क्या आप 'उद्धरण' के बारे में अधिक स्पष्टीकरण दे सकते हैं? – Zulu

11

यह एक छोटे से अजीब लग सकता है, फिर भी आप इसे आजमाइए सकता है

$ sqlite3 -init initf DATA.DB .schema > schema.sql 

परिणामस्वरूप आपको दो फाइलें मिलेंगी: एक सरल "आवेषण" (अंदरूनी वाला) t.sql) और दूसरा डीबी स्कीमा (schema.sql) के साथ।

+4

मैं मोड बदलते समय टेबल नाम सहित सुझाव देना चाहता हूं: '.mode सम्मिलित करें तालिका '। यह जेनरेट किए गए सम्मिलित बयान में तालिका का नाम शामिल करेगा। – Brigham