2012-04-03 13 views
45

मैंने अभी सीखा है कि माइस्क्ल का मूल CSV storage engine है जो प्रति तालिका कोमा सेपरेटेड वैल्यू फ़ाइल में डेटा संग्रहीत करता है।सीएसवी स्टोरेज इंजन का उपयोग कर सीएसवी फ़ाइल से सीधे mysql तालिका बनाएं?

टेबल उपयोगकर्ताओं को बनाने < पथ/USERS.CSV

जहां users.csv उपयोगकर्ता द्वारा अपलोड की गई है:

यह एक मेज सीधे एक अपलोड की गई CSV फ़ाइल से की तरह कुछ बनाने के लिए, संभव है?

+0

बिल्कुल सही नहीं है लेकिन आप लोड डेटा इन्फाइल http://dev.mysql.com/doc/refman/5.1/en/load-data.html का संदर्भ दे रहे हैं, पाठ फ़ाइल जिसके लिए एक CSV संरचित फ़ाइल जैसा दिखता है । – wisefish

+2

उत्तर में मेरा अपडेट देखें –

+0

आप CSV को CREATE TABLE (स्कीमा के साथ) में कनवर्ट करने के लिए इस टूल (https://csv-schema.surge.sh/) का उपयोग कर सकते हैं। यह फ़ील्ड प्रकार (काफी अच्छा) अनुमान लगाने का प्रयास करता है। – s1x

उत्तर

36

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

लेकिन वहाँ एक तरीके के रूप John Swapceinski in the comment section of MySQL manual द्वारा वर्णित एक बैच फ़ाइल से तालिका बयान बनाने उत्पन्न करने के लिए है।

5 सितंबर 2011 5:33 बजे जॉन स्वैपिसिंस्की द्वारा पोस्ट किया गया।
csv फ़ाइल के हेडर का उपयोग कर एक टेबल बनाएँ:

#!/bin/sh 
# pass in the file name as an argument: ./mktable filename.csv 
echo "create table $1 (" 
head -1 $1 | sed -e 's/,/ varchar(255),\n/g' 
echo " varchar(255));" 
+3

उस स्क्रिप्ट का विस्तारित संस्करण जॉन के http://en.positon.org/post/Import-CSV-file-to-MySQL – Alvin

+0

पर आधारित था, विस्तारित संस्करण अभी भी http://en.positon.org पर है/और बस 'CTRL + F' "MySQL पर CSV फ़ाइल आयात करें"। –

+1

क्या मुझे विश्वास है कि यह स्क्रिप्ट सभी स्तंभों को 'वचर (255)' के रूप में बनाती है? यदि ऐसा है तो यह वास्तव में उपयोगी नहीं है। – Heisenberg

0

यह संभव नहीं है, आप फिर भी एक मौजूदा टेबल फ़ाइल को अधिलेखित कर सकते हैं। लेकिन सुनिश्चित करें कि आपकी फ़ाइल में लाइन समाप्ति यूनिक्स शैली (केवल \ n के साथ समाप्त होती है), विंडोज़ शैली नहीं (\ r \ n के साथ समाप्त), चाहे आप विंडोज़ के तहत काम कर रहे हों या नहीं।

7

मुझे पता है कि यह एक विषय के रूप में एक छोटा सा पुराना है, लेकिन वहाँ एक आसान तरीका है - अगर - आप अपने mysql सामने अंत के रूप में phpmyadmin उपयोग कर रहे हैं।

1) केवल डिफ़ॉल्ट सेटिंग्स के साथ डेटाबेस बनाएँ।

2) डेटाबेस का चयन करें।

3) स्क्रीन के शीर्ष पर "आयात" पर क्लिक करें।

4) "प्रारूप" के तहत सीएसवी का चयन करें।

5) चुनें विकल्प आपके csv फ़ाइल लेना अनुचित है (किसी पाठ संपादक में csv फ़ाइल खोलने के लिए और इसे संदर्भ 'उचित' विकल्प प्राप्त करने के)।

आप इसे गंदगी ऊपर तो कोई बात नहीं, बस डेटाबेस ड्रॉप और फिर कोशिश करें।

+1

सीएसवी – pal4life

+0

के अलावा कुछ भी चुनने के लिए प्रारूप के तहत कोई विकल्प नहीं है, आपको तालिका का नाम बदलना होगा, लेकिन यह सबसे आसान पीएमए समाधान है। – dval

1

मैंने विंडोज कमांड लाइन टूल बनाया है जो बस यही करता है।

आप इसे यहां से डाउनलोड कर सकते हैं: http://commandline.dk/csv2ddl.htm

उपयोग:

C:\Temp>csv2ddl.exe mysql test.csv test.sql 

या

C:\Temp>csv2ddl.exe mysql advanced doublequote comma test.csv test.sql 
+0

अब, यह हमारे लिए खराब विंडोज उपयोगकर्ताओं के लिए अच्छा लग रहा था। दुर्भाग्यवश लिंक अब और काम नहीं करता है; ( – Verakso

63

बस csvkit, जो CSV फ़ाइलों के लिए यूनिक्स कमांड लाइन उपकरणों का एक सेट है की खोज की।pip install csvkit साथ अपने Mac पर स्थापित किया है और आदेश था:

csvsql --dialect mysql --snifflimit 100000 bigdatafile.csv > maketable.sql 

आप वैकल्पिक रूप से एक डाटाबेस कनेक्शन स्ट्रिंग प्रदान कर सकते हैं और इसे सीधे तालिका लोड कर सकते हैं।

+0

यह टूल अद्भुत है, धन्यवाद! मुफ्त, पायथन में बनाया गया है, और 'बस काम करता है' – Anentropic

+1

डेबियन-आधारित सिस्टम पर आप इसे 'sudo apt-get install python3-csvkit' –

+5

के माध्यम से इंस्टॉल कर सकते हैं एक (mysql) डीबी पर सीधे एक सीएसवी फ़ाइल आयात करने के लिए ऐसा कुछ करें: 'csvsql --db mysql: // उपयोगकर्ता: पासवर्ड @ लोकलहोस्ट: 3306/dbschema --टेबल mytable --insert file.csv' (आप python3-pymysql को भी स्थापित करना होगा) –

2

किसी php solutin की तलाश में है, तो:

पैकेज: https://github.com/uzi88/PHP_MySQL_wrapper

$db = new MySQL_wrapper(MySQL_HOST, MySQL_USER, MySQL_PASS, MySQL_DB); 
$db->connect(); 

// this sample gets column names from first row of file 
//$db->createTableFromCSV('test_files/countrylist.csv', 'csv_to_table_test'); 

// this sample generates column names 
$db->createTableFromCSV('test_files/countrylist1.csv', 'csv_to_table_test_no_column_names', ',', '"', '\\', 0, array(), 'generate', '\r\n'); 

/** Create table from CSV file and imports CSV data to Table with possibility to update rows while import. 
* @param string  $file   - CSV File path 
* @param string  $table   - Table name 
* @param string  $delimiter  - COLUMNS TERMINATED BY (Default: ',') 
* @param string  $enclosure  - OPTIONALLY ENCLOSED BY (Default: '"') 
* @param string  $escape   - ESCAPED BY (Default: '\') 
* @param integer  $ignore   - Number of ignored rows (Default: 1) 
* @param array  $update   - If row fields needed to be updated eg date format or increment (SQL format only @FIELD is variable with content of that field in CSV row) $update = array('SOME_DATE' => 'STR_TO_DATE(@SOME_DATE, "%d/%m/%Y")', 'SOME_INCREMENT' => '@SOME_INCREMENT + 1') 
* @param string  $getColumnsFrom - Get Columns Names from (file or generate) - this is important if there is update while inserting (Default: file) 
* @param string  $newLine  - New line delimiter (Default: \n) 
* @return number of inserted rows or false 
*/ 
// function createTableFromCSV($file, $table, $delimiter = ',', $enclosure = '"', $escape = '\\', $ignore = 1, $update = array(), $getColumnsFrom = 'file', $newLine = '\r\n') 

$db->close(); 
4

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

http://www.convertcsv.com/csv-to-sql.htm

+0

बस मुझे क्या चाहिए। धन्यवाद! –

1

MySQL आप कर सकते हैं।

http://dev.mysql.com/doc/refman/5.6/en/mysql-for-excel.html

एक्सेल में अपनी CSV फ़ाइल खोलें। आप रिमोट या स्थानीय mysql सर्वर की एक नई तालिका में एक्सेल डेटा निर्यात करने के लिए इस प्लगइन का उपयोग कर सकते हैं। यह आपके डेटा का विश्लेषण करेगा (शीर्ष 100 से 1000 पंक्तियां) और एक संबंधित तालिका स्कीमा बनाएं।

+0

वाह। यह टूल बस अद्भुत है। मुझे 99 फ़ील्ड और 1100 पंक्तियों के साथ एक टेबल बनाना था। इस उपकरण ने कुछ किया ई मूल डेटा सत्यापन और तालिका और मेरे लिए सभी क्षेत्रों का निर्माण किया। बहुत अच्छी तरह से किया। मैं दूरस्थ रूप से GoDaddy MySQL तालिकाओं तक पहुंचने में सक्षम था। नोट: यह टूल केवल विंडोज ऑपरेटिंग सिस्टम के लिए उपलब्ध है। – zipzit

4

अन्य समाधानों के अलावा मैक उपयोगकर्ता यह ध्यान रखना चाहते हैं कि SQL प्रो में एक CSV आयात विकल्प है जो काफी अच्छी तरह से काम करता है और लचीला है - आप आयात पर कॉलम नाम और फ़ील्ड प्रकार बदल सकते हैं। नई तालिका चुनें अन्यथा प्रारंभिक संवाद कुछ हद तक निराशाजनक दिखाई दे सकता है।

एसक्यूएल प्रो: http://www.sequelpro.com अगली कड़ी प्रो - डेटाबेस प्रबंधन MySQL डेटाबेस

2

के साथ काम करने के लिए आवेदन मैं shiplu.mokadd.im से स्क्रिप्ट को अपनाया मेरी जरूरतों के अनुरूप हों। किसके हित में:

#!/bin/bash 
if [ "$#" -lt 2 ]; then 
    if [ "$#" -lt 1 ]; then 
     echo "usage: $0 [path to csv file] <table name> > [sql filename]" 
     exit 1 
    fi 
    TABLENAME=$1 
else 
    TABLENAME=$2 
fi 
echo "CREATE TABLE $TABLENAME (" 
FIRSTLINE=$(head -1 $1) 
# convert lowercase characters to uppercase 
FIRSTLINE=$(echo $FIRSTLINE | tr '[:lower:]' '[:upper:]') 
# remove spaces 
FIRSTLINE=$(echo $FIRSTLINE | sed -e 's/ /_/g') 
# add tab char to the beginning of line 
FIRSTLINE=$(echo "\t$FIRSTLINE") 
# add tabs and newline characters 
FIRSTLINE=$(echo $FIRSTLINE | sed -e 's/,/,\\n\\t/g') 
# add VARCHAR 
FIRSTLINE=$(echo $FIRSTLINE | sed -e 's/,/ VARCHAR(255),/g') 
# print out result 
echo -e $FIRSTLINE" VARCHAR(255));" 
3

मुझे माईएसQL वर्कबेंच का उपयोग करने की अनुशंसा की जाती है जहां आयात डेटा है। सीएसवी या जेएसओएन से नई तालिका भी संभव है।

तालिका सूची पर MySQL Workbench आवेदन उपयोग संदर्भ मेनू में और

तालिका डेटा आयात विज़ार्ड

MySQL Workbench image

MySQL Workbench के लिए लिंक का उपयोग करें। https://dev.mysql.com/doc/workbench/en/wb-admin-export-import-table.html

+0

कृपया एक लिंक न दें बल्कि इस मुद्दे को हल करने का वर्णन करें! कृपया देखें [जवाब कैसे दें] (http://stackoverflow.com/help/how-to-answer) – jkalden

0

यदि आप पाइथन का उपयोग करने के ठीक हैं, तो पांडस ने मेरे लिए बहुत अच्छा काम किया (csvsql मेरे मामले के लिए हमेशा के लिए फांसी)। की तरह कुछ:

from sqlalchemy import create_engine 
import pandas as pd 

df = pd.read_csv('/PATH/TO/FILE.csv') 
# Optional, set your indexes to get Primary Keys 
df = df.set_index(['COL A', 'COL B']) 

engine = create_engine('mysql://user:[email protected]/db', echo=False) 

df.to_sql(table_name, dwh_engine, index=False) 

इसके अलावा इस "सीएसवी इंजन का उपयोग कर" भाग जो प्रश्न का हिस्सा था समाधान नहीं करता है, लेकिन मुझे उपयोगी हो सकता है और साथ ही।

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