2010-07-15 13 views
8

मैं एक साधारण एसक्यूएल प्रश्न है। मैं एक 3 स्तंभ डेटाबेस बनाना चाहते और मैं निम्नलिखित कोड है: जब मैं दो कॉलम (prideID और pubmedID) के साथ एक सरल csv फ़ाइल आयात करने की कोशिशसरल एसक्यूएल लाइट तालिका/आयात सवाल

sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);" 

, मैं करने के लिए एक "डेटा के 3 स्तंभों की उम्मीद है, लेकिन 2 "त्रुटि मिली। मैं t1key एक पूर्णांक होना, और स्वचालित रूप से गिनती के रूप में नए क्षेत्रों जोड़ रहे हैं करना चाहते हैं। मैं इस काम करने के लिए करने के लिए प्राथमिक कुंजी के सामने नहीं NULL डाल करने के लिए है?

उत्तर

17

.import इनपुट (विभाजक सेट करने से छोड़कर) देगी समर्थन नहीं करता। आपको CSV फ़ाइल को एक अस्थायी तालिका में आयात करने और वास्तविक तालिका में डालने की आवश्यकता है। यहां एक उदाहरण सत्र है:

$ cat a.csv 
1,2 
3,4 
5,6 
$ sqlite3 a.db 
SQLite version 3.6.23.1 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> create table foo(id integer primary key,x,y); 
sqlite> create temp table footmp(x,y); 
sqlite> .separator , 
sqlite> .import a.csv footmp 
sqlite> select * from footmp; 
1,2 
3,4 
5,6 
sqlite> insert into foo(x,y) select * from footmp; 
sqlite> select * from foo; 
1,1,2 
2,3,4 
3,5,6 
sqlite> drop table footmp; 

आप देखते हैं कि आईडी गिनती है। जो हमेशा एक अद्वितीय, आरोही नंबर है - इसका कारण यह है प्रकार पूर्णांक प्राथमिक कुंजी के साथ एक स्तंभ आंतरिक ROWID के लिए एक उपनाम के रूप में व्यवहार किया जाता है।

0

वर्गमीटर (SQLite 3.7.15.2 2013-01-09) के साथ। मैं पहले, आपको पहले एक temp तालिका में आयात करने की आवश्यकता नहीं है। मैंने यह सुनिश्चित करना था कि मैं आयात शुरू करने से पहले एक विभाजक सेट करूँ। मैं प्रत्येक पंक्ति के लिए आईडी मान निर्दिष्ट था, इसलिए, csv में मेरा पहला स्तंभ अद्वितीय पूर्णांकों

1

के बजाय insert उपयोग

create table newtable as select * from footmp; 

यह बेहतर और तेज है का एक सेट था।

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