CSV को SQLite में आयात करें


117

मैं एक csv फ़ाइल को SQLite तालिका में आयात करने की कोशिश कर रहा हूं।

उदाहरण csv:

1,2
5,6
2,7

उदाहरण आदेश:

sqlite> create table foo(a, b);
sqlite> .separator ,
sqlite> .import test.csv foo
Error: test.csv line 1: expected 2 columns of data but found 4

मुझे भी यकीन नहीं है कि यह छह कॉलम डेटा और दो कॉलम के साथ चार कॉलम क्यों पाएगा।


ऐसा प्रतीत होता है कि कमांड पहली पंक्ति में कॉलम हेडर की उम्मीद करता है, और लाइन-टर्मिनेटर को इस तरह से मान्यता नहीं दी जा रही है। 6 - 2 = 4
यांत्रिक_मीट

क्या मैं एक लाइन-टर्मिनेटर निर्दिष्ट कर सकता हूं या क्या मेरे सीएसवी से कोई गायब है?
मौली वाल्टर्स

1
ऐसा नहीं लगता है कि आप SQLite कमांड लाइन टूल से लाइन-टर्मिनेटर निर्दिष्ट कर सकते हैं। क्या आपके पास एक पाठ-संपादक है (जैसे विंडोज पर नोटपैड, लेकिन बेहतर) जो आपको लाइन-टर्मिनेटिंग वर्ण दिखाएगा? तीन मुख्य विविधताएँ हैं: पुराने मैक \r\nपर विंडोज पर, \n* निक्स (नए मैक शामिल हैं) \r
यांत्रिक_मीट

मैं BBEdit का उपयोग कर रहा हूं, लेकिन मैं लाइनों के अंत में उन वर्णों में से कोई भी नहीं देखता हूं। मैंने उन्हें मैन्युअल रूप से जोड़ने की कोशिश की, लेकिन यह कुछ भी करने के लिए प्रतीत नहीं होता है ...
मौली वाल्टर्स

1
यह वेबसाइट CSV (या एक्सेल) फाइल को SQLite - Converttosqlite.com में बदल सकती है
कोड

जवाबों:


153

टिप्पणियों में जो भी कहा जा रहा है, SQLite आपके इनपुट को 1, 25, 62, 7. के रूप में देखता है, मुझे भी समस्या थी, और मेरे मामले में इसे "विभाजक," को ".mode csv" में बदलकर हल किया गया था। तो आप कोशिश कर सकते हैं:

sqlite> create table foo(a, b);
sqlite> .mode csv
sqlite> .import test.csv foo

पहला कमांड टेबल के लिए कॉलम नाम बनाता है। हालाँकि, यदि आप csv फ़ाइल से विरासत में प्राप्त कॉलम नाम चाहते हैं, तो आप पहली पंक्ति को अनदेखा कर सकते हैं।


83
अन्य लोगों के लिए जो एक खोज से यहां उतरते हैं, अगर आपकी सीएसवी फ़ाइल की पहली पंक्ति में कॉलम नाम शामिल हैं, तो आप पहले create tableकमांड को छोड़ सकते हैं और एसक्यूएलइट सीएसवी फ़ाइल से कॉलम नामों का उपयोग करेगा।
EarlCrapstone

2
@EarlCrapstone: क्या आप विस्तृत कर सकते हैं? यह मेरे लिए काम नहीं लगता है।
d33tah

3
@ d33tah इन उदाहरणों को देखें । ध्यान दें कि पहली पंक्ति में कॉलम नाम Year,Make,Model,Description,Priceऔर वास्तविक डेटा नहीं हैं। यदि आपकी CSV फ़ाइल में ऐसा है, तो आपको create tableकमांड का उपयोग करके मैन्युअल रूप से तालिका बनाने की आवश्यकता नहीं है । .importआदेश स्तंभ नाम निर्धारित करने के लिए अपने फ़ाइल में पहली पंक्ति का उपयोग करें और तालिका के हिसाब से पैदा करेगा। आपको अभी भी कमांड में तालिका का नाम शामिल करना है । SQLite डॉक्स से एक ही जानकारी ।
इयरलक्रैपस्टोन

तुम क्यों तय कर रहे हैं .mode? क्या यह केवल आउटपुट के लिए नहीं है?
एलन

यदि आप पाते हैं कि जनरेट किया गया टेबल एक साथ कई कॉलमों को समूहित करता है, तो जाँच लें कि आप एक आरक्षित शब्द जैसे typeCSV कॉलम नाम का उपयोग नहीं कर रहे हैं ।
paulvs

29

यहाँ है कि मैं यह कैसे किया।

  • टैब्स (\ t) द्वारा अलग की जाने वाली सीएसवी फ़ाइल को रूपांतरित / परिवर्तित करें और किसी भी उद्धरण से संलग्न न हों (शाब्दिक रूप से उद्धरण की व्याख्या - पुराने डॉक्स कहते हैं)
  • Db का sqlite शेल दर्ज करें जिसमें डेटा को जोड़ने की आवश्यकता है

    sqlite> .separator "\t" ---IMPORTANT! should be in double quotes sqlite> .import afile.csv tablename-to-import-to


अनेक पंक्तियों के लिए, मेरे tsv इस आदेश के साथ पंक्ति विभाजक निर्दिष्ट करने के लिए की जरूरत है .separator "\t" "\r"
mfink

1
फ़ाइल स्वरूपों पर चर्चा करते समय, tsv! = Csv टूल
एलन

24

मैं अपने स्वयं के अनुभव के साथ पिछले उत्तरों से जानकारी विलय कर रहा हूं। सबसे आसान यह है कि कॉमा से अलग किए गए टेबल हेडर को सीधे अपने सीएसवी फाइल में जोड़ें, उसके बाद एक नई लाइन, और फिर आपके सभी सीएससी डेटा।

यदि आप कभी भी (मेरे जैसे) स्काईलाइट सामान नहीं कर रहे हैं, तो यह आपको एक वेब खोज या दो को बचा सकता है:

Sqlite खोल में दर्ज करें:

$ sqlite3 yourfile.sqlite
sqlite>  .mode csv
sqlite>  .import test.csv yourtable
sqlite>  .exit

यदि आपको Sqlite अपने मैक पर स्थापित नहीं हुआ है, तो चलाएं

$ brew install sqlite3

Homebrew को स्थापित करने के लिए आपको एक वेब खोज करने की आवश्यकता हो सकती है।


1
कैसे करें unescaped " characterअलर्ट?
TMOTTM

यदि आप आयात करने से पहले एक तालिका बनाते हैं, तो यह हेडर की तलाश नहीं करेगा।
रॉल्फ

मुझे उसी फ़ोल्डर में फ़ाइल डालनी है जहाँ sqlite3.exe स्थित है। क्या मैं csv फ़ाइल के लिए किसी अन्य पथ का उपयोग कर सकता हूं?
जयदीप कर्ण

मामूली बिंदु: "यदि आपने अपने मैक पर स्क्लाइट को स्थापित नहीं किया है" ... AFAIK यह डिफ़ॉल्ट रूप से स्थापित है।
लारीक्स डेसीडुआ

8

.import कमांड से पहले, ".mode csv" टाइप करें


5
.mode केवल आउटपुट के लिए है
DeliriumTremens

9
जाहिरा तौर पर ऐसा नहीं है। .Import doc सेक्शन से: ध्यान दें कि ".import" कमांड चलाने से पहले "मोड" को "csv" पर सेट करना महत्वपूर्ण है। यह कमांड-लाइन शेल को कुछ अन्य प्रारूप के रूप में इनपुट फ़ाइल टेक्स्ट की व्याख्या करने की कोशिश करने से रोकने के लिए आवश्यक है।
रिचर्ड - दुष्ट लहर लिमिटेड

8

Csl फ़ाइल को sqlite3 में कैसे आयात करें

  1. डेटाबेस बनाएँ

    sqlite3 NYC.db
  2. मोड और टैबलेनम सेट करें

    .mode csv tripdata
  3. Csl फ़ाइल डेटा को sqlite3 में आयात करें

    .import yellow_tripdata_2017-01.csv tripdata
  4. टेबल लगाएं

    .tables
  5. अपनी तालिका स्कीमा खोजें

    .schema tripdata
  6. तालिका डेटा ढूँढें

    select * from tripdata limit 10;
  7. तालिका में पंक्तियों की संख्या गिनें

    select count (*) from tripdata;


3

मुझे बिल्कुल वही समस्या थी (SQLite3 3.7.13 के साथ OS X Maverics 10.9.1 पर, लेकिन मुझे नहीं लगता कि SQLite कारण से संबंधित है)। मैंने एमएस एक्सेल 2011 से सहेजे गए सीएसवी डेटा को आयात करने की कोशिश की, जो बी.टी.वी. ';'स्तंभ विभाजक के रूप में उपयोग करता है । मुझे पता चला कि एक्सेल से सीएसवी फ़ाइल अभी भी मैक ओएस से 9 बार न्यूलाइन चरित्र का उपयोग करती है, इसे यूनिक्स में बदलकर न्यूलाइन ने समस्या को हल किया। AFAIR BBEdit के पास इसके लिए एक कमांड है, साथ ही सब्बल टेक्स्ट 2 भी है।


2
इसका उपयोग करना आसान है tr -s '\r' '\n'और यह सभी प्रकार की यादृच्छिक फ़ाइलों के साथ काम करेगा।
डोनल फैलो


0

जैसा कि कुछ वेबसाइट और अन्य लेख निर्दिष्ट करते हैं, इसकी सरलता इस पर एक नज़र है। https://www.sqlitetutorial.net/sqlite-import-csv/

हमें csvफ़ाइल के लिए विभाजक निर्दिष्ट करने की आवश्यकता नहीं है , becayse csv का अर्थ है अल्पविराम अलग। sqlite> .separator ,इस लाइन की कोई जरूरत नहीं।

sqlite> create table cities(name, population);
sqlite> .mode csv
sqlite> .import c:/sqlite/city_no_header.csv cities

यह निर्दोष काम करेगा :)

PS: हेडर के साथ मेरे शहर।


name,population
Abilene,115930
Akron,217074
Albany,93994
Albuquerque,448607
Alexandria,128283
Allentown,106632
Amarillo,173627
Anaheim,328014

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