csv - CSS फ़ाइल को MySQL तालिका में कैसे आयात करें





load-data-infile (12)


आपकी समस्या का मूल तालिका में उन लोगों को CSV फ़ाइल में कॉलम से मेल खाता प्रतीत होता है।

इस तरह की चीज़ के लिए कई ग्राफिकल mySQL क्लाइंट्स के पास बहुत अच्छा आयात संवाद है।

नौकरी के लिए मेरा पसंदीदा विंडोज आधारित HeidiSQL । यह आपको LOAD DATA कमांड बनाने के लिए एक ग्राफिकल इंटरफेस देता है; आप इसे बाद में प्रोग्रामेटिक रूप से फिर से उपयोग कर सकते हैं।

स्क्रीनशॉट: "टेक्स्टफाइल आयात करें" संवाद

आयात टेक्स्टफाइल को खोलने के लिए "संवाद, Tools > Import CSV file :

मेरे पास एक असामान्य घटनाएं हैं- एक क्लाइंट से डायरी सीएसवी जो कि मैं एक MySQL तालिका में लोड करने की कोशिश कर रहा हूं ताकि मैं एक सेन प्रारूप में दोबारा प्रतिक्रिया कर सकूं। मैंने 'CSVImport' नामक एक टेबल बनाई है जिसमें CSV फ़ाइल के प्रत्येक कॉलम के लिए एक फ़ील्ड है। सीएसवी में 99 कॉलम हैं, इसलिए यह अपने आप में एक कठिन कार्य था:

CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);

तालिका में कोई बाधा नहीं है, और सभी फ़ील्ड VARCHAR (256) मान रखते हैं, जिसमें कॉलम (आईएनटी द्वारा प्रतिनिधित्व), हां / नहीं (बीआईटी द्वारा प्रतिनिधित्व), कीमतें (DECIMAL द्वारा प्रतिनिधित्व), और टेक्स्ट ब्लर्ब्स ( टेक्स्ट द्वारा प्रतिनिधित्व)।

मैंने फ़ाइल में डेटा लोड करने का प्रयास किया:

LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023  Deleted: 0  Skipped: 0  Warnings: 198256
SELECT * FROM CSVImport;
| NULL             | NULL        | NULL           | NULL | NULL               | 
...

पूरी तालिका NULL से भरा NULL

मुझे लगता है कि समस्या यह है कि टेक्स्ट ब्लर्ब्स में एक से अधिक पंक्तियां होती हैं, और MySQL फ़ाइल को पार्स कर रहा है जैसे कि प्रत्येक नई लाइन एक डाटाबेस पंक्ति से मेल खाती है। मैं फ़ाइल को ओपनऑफिस में बिना किसी समस्या के लोड कर सकता हूं।

Clientdata.csv फ़ाइल में 25 9 3 लाइनें और 570 रिकॉर्ड हैं। पहली पंक्ति में कॉलम नाम हैं। मुझे लगता है कि यह अल्पविराम सीमित है, और पाठ को डबलक्वाइट के साथ स्पष्ट रूप से सीमित किया गया है।

अद्यतन करें:

संदेह में, मैन्युअल पढ़ें: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

मैंने LOAD DATA स्टेटमेंट में कुछ जानकारी दी है कि ओपनऑफिस अनुमान लगाने के लिए पर्याप्त स्मार्ट था, और अब यह रिकॉर्ड्स की सही संख्या लोड करता है:

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

लेकिन अभी भी बहुत सारे पूर्ण रिकॉर्ड हैं, और लोड किए गए डेटा में से कोई भी सही जगह पर नहीं लगता है।




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

http://dev.mysql.com/downloads/windows/excel/

आप एक्सेल के भीतर से अपडेट कर सकते हैं जो डेटाबेस को ऑनलाइन पॉप्युलेट करेगा। यह अल्ट्रा सस्ती गोडाडी साझा होस्टिंग पर बनाई गई MySQL फ़ाइलों के साथ बहुत अच्छी तरह से काम किया। (ध्यान दें जब आप गोडाडी में टेबल बनाते हैं, तो आपको डेटाबेस की साइट एक्सेस को सक्षम करने के लिए कुछ ऑफ-स्टैंडर्ड सेटिंग्स चुननी होंगी ...)

इस प्लगइन के साथ आपके एक्सएल स्प्रेडशीट और ऑनलाइन mySql डेटा स्टोरेज के बीच शुद्ध अंतःक्रियाशीलता है।




आप अपने सीएसवी के आधार पर एसक्यूएल बनाने / सम्मिलित कथन उत्पन्न करने के लिए इस ऑनलाइन टूल को भी आजमा सकते हैं। http://www.convertcsvtomysql.com/

मुझे इस उपकरण के बारे में क्या पसंद है:

  • सरल
  • यह न केवल INSERT कथन उत्पन्न करता है, बल्कि एक तालिका उत्पन्न करने के लिए बयान भी बनाता है
  • CREATE स्टेटमेंट जेनरेट करते समय, यह टूल न केवल सभी फ़ील्ड VARCHAR बनाता है - यह आपके सीएसवी में डेटा का विश्लेषण करता है, और उस विश्लेषण के आधार पर, यह उचित डेटा प्रकार चुनता है।

नुकसान

  • इनपुट फ़ाइल का आकार 3 एमबी तक सीमित है
  • हो सकता है कि आप अपने डेटा को किसी तीसरे पक्ष को देने को तैयार न हों



200+ पंक्तियों को आयात करने का सबसे आसान तरीका phpmyadmin sql विंडो में कमांड है

मेरे पास दो कॉलम CountryId, CountryName के साथ देश की एक साधारण तालिका है

यहां .csv डेटा है

यहां आदेश है:

LOAD DATA INFILE 'c:/country.csv' 
INTO TABLE country 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

एक बात ध्यान में रखें, दूसरे कॉलम में कभी नहीं दिखाई दें, अन्यथा आपका आयात बंद हो जाएगा




आप लोड डेटा स्टेटमेंट में कॉलम सूचीबद्ध करके इसे ठीक कर सकते हैं। manual :

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

... इसलिए आपके मामले में आपको उस क्रम में 99 कॉलम सूचीबद्ध करने की आवश्यकता है जिसमें वे सीएसवी फ़ाइल में दिखाई देते हैं।




Servername, उपयोगकर्ता नाम, पासवर्ड, dbname, अपनी फ़ाइल का पथ, tablename और फ़ील्ड जो आपके डेटाबेस में है, को सम्मिलित करना चाहते हैं

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "bd_dashboard";
    //For create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    $query = "LOAD DATA LOCAL INFILE 
                'C:/Users/lenovo/Desktop/my_data.csv'
                INTO TABLE test_tab
                FIELDS TERMINATED BY ','
                LINES TERMINATED BY '\n'
                IGNORE 1 LINES
                (name,mob)";
    if (!$result = mysqli_query($conn, $query)){
        echo '<script>alert("Oops... Some Error occured.");</script>';
        exit();
            //exit(mysqli_error());
       }else{
        echo '<script>alert("Data Inserted Successfully.");</script>'
       }
    ?>



डेटाबेस में तालिका लोड करने के लिए mysqlimport का उपयोग करें:

mysqlimport --ignore-lines=1 \
            --fields-terminated-by=, \
            --local -u root \
            -p Database \
             TableName.csv

मैंने इसे http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/ पर पाया

डिलीमीटर को एक टैब बनाने के लिए, --fields-terminated-by='\t'




मुझे पता है कि सवाल पुराना है , लेकिन मैं इसे साझा करना चाहता हूं

मैंने 0.046sec में 100K से अधिक रिकॉर्ड ( ~ 5MB ) आयात करने के लिए इस विधि का उपयोग किया

यहां बताया गया है कि आप इसे कैसे करते हैं:

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

अंतिम पंक्ति को शामिल करना बहुत महत्वपूर्ण है, यदि आपके पास एक से अधिक फ़ील्ड हैं यानी सामान्यतः यह अंतिम फ़ील्ड छोड़ देता है (MySQL 5.6.17)

LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

फिर, मान लें कि आपके पास अपने फ़ील्ड के शीर्षक के रूप में पहली पंक्ति है , तो आप इस लाइन को भी शामिल करना चाहेंगे

IGNORE 1 ROWS

ऐसा लगता है कि आपकी फ़ाइल में हेडर पंक्ति है या नहीं।

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(field_1,field_2 , field_3);



MySQL कमांड लाइन आयात पर बहुत अधिक समस्याओं के लिए प्रवण है। इसे कैसे करना है इसके बारे में यहां बताया गया है:

  • शीर्ष स्थान रखने के लिए हेडर नामों को संपादित करने के लिए एक्सेल का उपयोग करें
  • .csv के रूप में सहेजें
  • एक नई टेबल आयात करने और ऑटो बनाने के लिए मुफ्त नेविट लाइट एसक्यूएल ब्राउज़र का उपयोग करें (इसे एक नाम दें)
  • नई तालिका खोलें आईडी के लिए एक प्राथमिक ऑटो नंबर कॉलम डालें
  • वांछित के रूप में कॉलम के प्रकार को बदलें।
  • किया हुआ!



इसे आज़माएं, यह मेरे लिए काम करता है

    LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 ROWS;

IGNORE 1 ROWS यहां पहली पंक्ति को अनदेखा करता है जिसमें फ़ील्डनाम शामिल हैं। ध्यान दें कि फ़ाइल नाम के लिए आपको फ़ाइल का पूर्ण पथ टाइप करना होगा।




Mysql डेटाबेस में आयात csv फ़ाइल के लिए PHP क्वेरी

$query = <<<EOF
            LOAD DATA LOCAL INFILE '$file'
             INTO TABLE users
             FIELDS TERMINATED BY ','
             LINES TERMINATED BY '\n'
             IGNORE 1 LINES
            (name,mobile,email)
    EOF;
if (!$result = mysqli_query($this->db, $query))
   {
        exit(mysqli_error($this->db));
   }

** नमूना सीएसवी फ़ाइल डेटा **

name,mobile,email
Christopher Gritton,570-686-3439,[email protected]
Brandon Wilson,541-309-5149,[email protected]
Craig White,516-795-8065,[email protected]
David Whitney,713-214-3966,[email protected]



mysqldump का एक सामान्य उपयोग पूरे डेटाबेस का बैकअप बनाने के लिए है:

shell> mysqldump db_name > backup-file.sql

आप इस तरह सर्वर में डंप फ़ाइल को वापस लोड कर सकते हैं:

यूनिक्स

shell> mysql db_name < backup-file.sql

विंडोज कमांड प्रॉम्प्ट में वही:

mysql -p -u[user] [database] < backup-file.sql

शक्ति कोशिका

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

MySQL कमांड लाइन

mysql> use db_name;
mysql> source backup-file.sql;




mysql csv load-data-infile