2011-01-04 19 views
12

संभव डुप्लिकेट: जांच outfile "ई ब्रांड सेMySQL शीर्ष पर स्तंभ नामों के साथ सीएसवी पाठ फ़ाइलों में डंप?

चुनें *:
How to export/dump a MySql table into a text file including the field names (aka headers or column names)

मैं सीएसवी पाठ फ़ाइलों में एक मेज डंप करने के लिए इस एसक्यूएल का उपयोग करते/ब्रांड। सीएसवी " 'द्वारा नियंत्रित' '' द्वारा निर्धारित लाइनें" \ n ";

हालांकि यह दृष्टिकोण CSV फ़ाइल की शुरुआत में कॉलम नाम नहीं जोड़ता है। मेरा सवाल यह है कि सभी कॉलम/फील्ड नामों का चयन कैसे करें, जैसे कि जब आप तालिका निर्यात करते हैं तो phpMyAdmin क्या करता है और "पहली पंक्ति में फ़ील्ड नाम रखें" का चयन करें।

+0

इस चेक बाहर (यह एक वैकल्पिक हल है): [निर्यात सीएसवी पहली पंक्ति में शीर्षकों के साथ MySQL से फ़ाइल] (http://homepage.mac.com/kelleherk/iblog/C711669388/E20060511141025/index.html) –

उत्तर

16

मैंने उन नामों को मैन्युअल रूप से दर्ज करने के लिए एक तरीका निकाला जब तक आप MySQL 5 या उच्चतर चल रहे हों। यहाँ यह एक यूनिक्स कमांड लाइन पर चलाने के लिए एक bash स्क्रिप्ट के रूप में लिखा है:

DBNAME=<database_name> 
TABLE=<table_name> 

FNAME=/path/to/output/dir/$(date +%Y.%m.%d)-$DBNAME.csv 

#(1)creates empty file and sets up column names using the information_schema 
mysql -u <username> -p<password> $DBNAME -B -e "SELECT COLUMN_NAME FROM information_schema.COLUMNS C WHERE table_name = '$TABLE';" | awk '{print $1}' | grep -iv ^COLUMN_NAME$ | sed 's/^/"/g;s/$/"/g' | tr '\n' ',' > $FNAME 

#(2)appends newline to mark beginning of data vs. column titles 
echo "" >> $FNAME 

#(3)dumps data from DB into /var/mysql/tempfile.csv 
mysql -u <username> -p<password> $DBNAME -B -e "SELECT * INTO OUTFILE '/var/mysql/tempfile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' FROM $TABLE;" 

#(4)merges data file and file w/ column names 
cat /var/mysql/tempfile.csv >> $FNAME 

#(5)deletes tempfile 
rm -rf /var/mysql/tempfile.csv 

जबकि सबसे सुंदर समाधान, मुझे यकीन है कि यह कोई है जो एसक्यूएल और/जानता है द्वारा एक ही पंक्ति में संकुचित किया जा सकता है कर रहा हूँ या पार्टी की योजना बनाई एक छोटे से मुझे से बेहतर ...

क्या यह करता है:

  1. MySQL की जानकारी स्कीमा का उपयोग करता है एक खाली सीएसवी डब्ल्यू/कॉलम हेडर
  2. कि खाली सीएसवी के लिए एक अतिरिक्त न्यू लाइन जोड़ देती बनाने के लिए तो आपका डेटा दिखना शुरू हो जाएगा एक नई लाइन
  3. एक सुंदर मानक का उपयोग करता डेटा की एक सीएसवी पूर्ण बनाने के लिए
  4. फ़ाइल डब्ल्यू/कॉलम हेडर पर डेटा फ़ाइल संलग्न कर देता है
  5. (अस्थायी) डेटा को हटा देता "outfile जांच का चयन करें * ..." क्वेरी फ़ाइल

शुभकामनाएं, और यदि आप इसे साफ़ करते हैं, तो अपने परिणाम पोस्ट करें!

8

मुझे लगता है कि यह वही करता है जो आप चाहते हैं। मैं mysql 5.1.60 का उपयोग कर रहा हूं, यह पहली पंक्ति पर फील्ड नाम आउटपुट करता है। यह क्षेत्र विभाजक के रूप में "\ t" का उपयोग करेगा, मुझे यकीन नहीं है कि इसके बजाय अल्पविराम के लिए कैसे पूछना है।

echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv 
+0

वह अल्पविराम चरित्र वाले फ़ील्ड को उद्धृत नहीं करता है, इसलिए - आपके डेटा की प्रकृति के आधार पर, निश्चित रूप से - संभावित रूप से एक अवैध CSV फ़ाइल उत्पन्न करें। –

+0

@BobbyJack अगर विभाजक टैब है तो अब अल्पविरामों के बारे में चिंता करने की आवश्यकता नहीं है ... – rloth

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