2009-06-25 14 views
107

मुझे .sql या डिक करने की आवश्यकता है .csv SQLite में फ़ाइल (मैं SQLite3 API का उपयोग कर रहा हूं)। मुझे केवल टेबल को आयात/लोड करने के लिए प्रलेखन मिला है, पूरे डेटाबेस नहीं। अभी, जब मैं टाइप करता हूं:SQLite में एक .sql या .csv फ़ाइल लोड करने के लिए कैसे आयात करें?

sqlite3prompt> .import FILENAME TABLE 

मुझे एक वाक्यविन्यास त्रुटि मिलती है, क्योंकि यह तालिका की अपेक्षा कर रहा है और पूरे डीबी नहीं।

+0

[प्रख्यात प्रलेखन] (http://www.sqlite.org/cli.html#csv_import) – alttag

उत्तर

24

की तरह आदेश से यह कर का प्रयास करें:

cat dump.sql | sqlite3 database.db 

यह स्पष्ट रूप से केवल dump.sql में SQL कथन के साथ काम करेंगे। मुझे यकीन नहीं है कि एक सीएसवी कैसे आयात करें।

+0

मुझे लगता है कि यह वही काम करेगा, लेकिन उपयोगकर्ता को यह सुनिश्चित करना होगा कि sqlite3 सेटिंग्स के लिए सेट अप किया गया था '.mode csv' – Pred

+0

बस यहां एक टिप्पणी करना चाहते हैं, यह वास्तव में 100% मृत है, 'sqlite3 डेटाबेस.db

+0

@ जेवियरबुज़ी: क्षमा करें लेकिन इसका कोई मतलब नहीं है। उन दो तरीकों के बराबर हैं। जब आप एक विधि या दूसरे की कोशिश करते हैं तो आपके पास कुछ और होना चाहिए था। स्थिर परीक्षण स्थितियों के तहत मैं गारंटी देता हूं कि कोई गति अंतर नहीं होगा। – IcarusNM

152

एक SQL फ़ाइल से आयात करने के लिए निम्नलिखित का उपयोग करें:

sqlite> .read <filename> 

एक सीएसवी से आयात करने के लिए आप फ़ाइल प्रकार और गंतव्य तालिका निर्दिष्ट करना होगा फ़ाइल:

sqlite> .mode csv <table> 
sqlite> .import <filename> <table> 
+2

यह सही जवाब है, लेकिन कभी-कभी यह फंकी/टूटी हुई सीएसवी फाइलों पर चोक करता है। – Eli

+0

यह त्रुटि दे रहा है "db.sql नहीं खोल सकता", जब मैं उपयोग कर रहा हूं .्रेड कमांड। – Dory

+2

कॉलम नाम कैसे प्राप्त करते हैं, अगर वे सीएसवी फ़ाइल में मौजूद नहीं हैं? – sumanth232

20

खरोंच से जाने के लिए एक तालिका में सीएसवी आयात करने के लिए SQLite डीबी के साथ:

  • वेबसाइट से SQLite प्राप्त करें।
  • कमांड प्रॉम्प्ट पर sqlite3 <your_db_file_name> * इसे एक खाली फ़ाइल के रूप में बनाया जाएगा।
  • अपने नए डेटाबेस में एक नई टेबल बनाएं। आयात के लिए तालिका को आपके सीएसवी फ़ील्ड से मेल खाना चाहिए।
  • आप एसक्यूएल आदेश ऐसा करते हैं: CREATE TABLE <table_Name> (<field_name1> <Type>, <field_name2> <type>);

एक बार जब आप बनाई गई तालिका है और स्तंभों फ़ाइल से अपने डेटा से मेल तो आप इसके बाद के संस्करण कर सकते हैं ...

.mode csv <table_name> 
.import <filename> <table_name> 
+0

दोस्त, यह सवाल का जवाब नहीं देता है। यह संबंधित है, लेकिन इसका जवाब नहीं है ... – Jacob

+0

@jacob सिर्फ fyi, यह उत्तर लगभग * 4 * वर्ष पुराना है और जिस व्यक्ति ने इसे पोस्ट किया है वह यहां तीन वर्षों से अधिक नहीं रहा है। –

+0

आपने मेरे सप्ताह बचाए। मैंने अपना काम 3 सेकंड में पूरा कर लिया। मैंने 120 एमबी सीएसवी फ़ाइल को केवल 5 सेकंड में। डीबी में परिवर्तित कर दिया। – zackygaurav

11

sqlite3 .import कमांड सामान्य सीएसवी डेटा के लिए काम नहीं करेगा क्योंकि यह उद्धृत स्ट्रिंग में भी किसी भी अल्पविराम को डिलीमीटर के रूप में मानता है।

Create table T (F1 integer, F2 varchar); 
Insert into T values (1, 'Hey!'); 
Insert into T values (2, 'Hey, You!'); 

.mode csv 
.output test.csv 
select * from T; 

Contents of test.csv: 
1,Hey! 
2,"Hey, You!" 

delete from T; 

.import test.csv T 
Error: test.csv line 2: expected 2 columns of data but found 3 

ऐसा लगता है हम सम्मिलित बयान, या शायद एक अलग सीमांकक काम करेंगे की एक सूची में सीएसवी बदलना होगा:

यह फिर से आयात करना है कि खोल द्वारा बनाया गया था एक csv फ़ाइल की कोशिश कर भी शामिल है।

सुपरयूसर पर मैंने सीएसवी फाइलों से निपटने के लिए लॉगपार्सर का उपयोग करने के लिए एक सुझाव देखा, मैं इसे देखने जा रहा हूं।

+0

blairxy: आपको जो त्रुटि मिल रही है वह "अरे, आप!" में अल्पविराम के कारण है। दूसरी पंक्ति स्क्लाइट लोड करते समय 3 कॉलम देखता है और दूसरी कॉमा को हटाने पर आप इसे बिना त्रुटि के लोड कर सकते हैं। – Shiva

10

आप एक (अजगर) स्क्रिप्ट का उपयोग करने के लिए खुश कर रहे हैं तो वहाँ एक अजगर स्क्रिप्ट पर इस स्वचालित है: https://github.com/rgrp/csv2sqlite

हो जाएगा ताकि ऑटो बनाने आप के लिए मेज के साथ-साथ करते हैं कुछ बुनियादी प्रकार अनुमान लगा और आपके लिए डेटा कास्टिंग (इसलिए उदाहरण के लिए यह कुछ काम करेगा, कॉलम प्रकार को "असली" पर सेट करें)।

+0

लगभग काम करता है - हेडर पंक्ति ठीक आयात करता है। हालांकि मुझे 'sqlite3.ProgrammingError मिलता है: आपको 8-बिट बाइटस्टर्स का उपयोग नहीं करना चाहिए जबतक कि आप text_factory का उपयोग न करें जो 8-बिट बाइटस्ट्रेस (जैसे text_factory = str) की व्याख्या कर सके। यह अत्यधिक अनुशंसा की जाती है कि आप इसके बजाय अपने एप्लिकेशन को यूनिकोड स्ट्रिंग्स '# csv2sqlite.py {csv-file-path} {sqlite-db-path} [{table-name}] – Marcos

+0

हम्म पर स्विच करें, मैंने कभी भी यह त्रुटि नहीं देखी है इसका उपयोग कर क्या आप गैर-यूनिकोड या गैर-यूटीएफ 8 डेटा का उपयोग कर रहे थे? यदि ऐसा है तो आपको स्क्रिप्ट को उस विशिष्ट एन्कोडिंग का उपयोग करके सीएसवी फ़ाइल खोलने के लिए ट्विक करने की आवश्यकता हो सकती है। –

+0

लगभग उसी समय, मैंने एक रूबी लिपि लिखी जो एक ही काम करता है !! इसे फ़ाइल नाम से तालिका नाम का अनुमान लगाकर, एक साथ कई सीएसवी फ़ाइलों पर भी काम करना चाहिए। https://github.com/dergachev/csv2sqlite – Dergachev

1

चेक बाहर termsql। https://gitorious.org/termsqlhttps://gitorious.org/termsql/pages/Home

यह कमांड लाइन पर पाठ को एसक्यूएल में परिवर्तित करता है। (सीएसवी केवल पाठ है)

उदाहरण:

cat textfile | termsql -o sqlite.db 

डिफ़ॉल्ट रूप से सीमांकक खाली स्थान के है, इसलिए यह सीएसवी कि commata उपयोग कर रहा है के साथ काम करने के लिए, तो आप इस तरह यह करना चाहते हैं:

cat textfile | termsql -d ',' -o sqlite.db 

वैकल्पिक रूप से आप यह कर सकते हैं:

termsql -i textfile -d ',' -o sqlite.db 

डिफ़ॉल्ट यह स्तंभ नाम उत्पन्न होगा "COL0" से, "Col1", अगर आप पानी NT यह कॉलम नाम आप ऐसा करते हैं के लिए पहली पंक्ति का उपयोग करें:

termsql -i textfile -d ',' -1 -o sqlite.db 

आप कस्टम स्तंभ नाम सेट करना चाहते हैं आप ऐसा करते हैं:

termsql -i textfile -d ',' -c 'id,name,age,color' -o sqlite.db 
1

SQLite अत्यंत लचीला है, क्योंकि यह भी अनुमति देता है एसक्यूएलएट विशिष्ट dot commands एसक्यूएल सिंटैक्स में, (हालांकि उन्हें सीएलआई द्वारा व्याख्या किया जाता है।) इसका मतलब है कि आप इस तरह की चीजें कर सकते हैं।

इस तरह एक sms तालिका बनाएँ:

# sqlite3 mycool.db '.schema sms' 
CREATE TABLE sms (_id integer primary key autoincrement, Address VARCHAR, Display VARCHAR, Class VARCHAR, ServiceCtr VARCHAR, Message VARCHAR, Timestamp TIMESTAMP NOT NULL DEFAULT current_timestamp); 

फिर दो फाइलें:

# echo "1,ADREZZ,DizzPlay,CLAZZ,SMSC,DaTestMessage,2015-01-24 21:00:00">test.csv 

# cat test.sql 
.mode csv 
.header on 
.import test.csv sms 

एसक्यूएल फ़ाइल का उपयोग CSV फ़ाइल के आयात की जांच के लिए चलाएँ:

# sqlite3 -csv -header mycool.db '.read test.sql' 

निष्कर्ष में, इसका मतलब है कि आप SQLite में .import कथन का उपयोग कर सकते हैं एसक्यूएल, जैसा कि आप किसी अन्य आरडीबी में कर सकते हैं, जैसे MySQL LOAD DATA INFILE आदि। हालांकि, इसकी अनुशंसा नहीं की जाती है।

-1

phpLiteAdmin के साथ अपने सीएसवी या एसक्यूएल को एसक्लाइट में आयात करें, यह उत्कृष्ट है।

1

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

संबंधित मुद्दे