2008-11-04 13 views
15

माईएसक्ल के दुभाषिया में, तालिका को अपने फ़ील्ड नामों के साथ स्क्रीन पर डंप करना बहुत आसान है।फ़ील्ड नामों (उर्फ हेडर या कॉलम नाम) सहित एक टेक्स्ट फ़ाइल में एक MySQL तालिका को निर्यात/डंप करने के लिए कैसे करें

एक टैब-डिलीमिट या सीएसवी आउटफाइल में तालिका निर्यात करने का कोई आसान तरीका नहीं है, जिसमें इसके कॉलम हेडर शामिल हैं।

मैं किसी अन्य भाषा में प्रोग्राम लिखने के बिना केवल SQL या Linux कमांड लाइन का उपयोग करके ऐसा करने का प्रयास कर रहा हूं।

आप

उत्तर

19

कमांडलाइन ग्राहक के लिए क्वेरी गरमा पहली पंक्ति

$ echo "select * from surveys limit 5" | mysql -uroot -pGandalf surveys 
phone param1 param2 param3 param4 p0  p1  p2  p3  audio4 code time 
XXXXXXXXX  2008-07-02  11:17:23  XXXXXXXX  SAT  -  -  -  -  -  ERROR 2008-07-02 12:18:32 
XXXXXXXXX  2008-07-02  11:22:52  XXXXXXXX  SAT  -  -  -  -  -  COLGADO 2008-07-02 12:04:29 
XXXXXXXXX  2008-07-02  11:41:29  XXXXXXXX  SAT  -  -  -  -  -  COLGADO 2008-07-02 12:07:22 
XXXXXXXXX  2008-07-02  12:16:19  XXXXXXXX  SAT  1  1  1  9  XXXXXXXXX_4.wav  OK  2008-07-02 16:14:27 
XXXXXXXXX  2008-07-02  08:21:25  XXXXXXXX  SAT  1  1  1  1  XXXXXXXXX_4.wav  OK  2008-07-02 12:29:40 
+1

मैं इस परीक्षण किया है और यह काम किया के रूप में विज्ञापित –

+3

यह एक हैक बल्कि mysql से प्रदान की जाती है, एक पाठ फ़ाइल में वर्डप्रेस mysql डेटाबेस से पासवर्ड स्तंभ पाने के लिए की जरूरत समारोह। मुझे लगता है कि यह अन्य ओएस के लिए काम नहीं कर सकता है। – janetsmith

+1

यह एक हैक नहीं है, प्रति से। यह निश्चित रूप से उन सिस्टम पर काम नहीं कर सकता है जो एक सेन कमांड लाइन इंटरफेस और mysql कमांड लाइन क्लाइंट दोनों प्रदान नहीं करते हैं। –

1

आप mysqldump कमांड के साथ ऐसा कर सकते हैं के रूप में स्तंभ नाम के साथ एक टैब अलग की गई सूची आउटपुट धन्यवाद। --tab और --xml विकल्पों पर एक नज़र डालें।

+0

मैंने इसका परीक्षण किया और यह संतोषजनक परिणाम नहीं दिया। अर्थात् "sudo mysqldump --user = root --pass = mypass -T/home/mydir mydb mytable" उपज "mysqldump: त्रुटि मिली: 1: फ़ाइल '/home/mydir/mytable.txt' फ़ाइल नहीं बना/लिख नहीं सकता (एरकोड: 13) 'चयन में आउटपुट' निष्पादित करते समय " –

+0

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

+1

ठीक है, इसे 777 अनुमतियों के साथ निर्देशिका बनाकर काम करने के लिए मिला। हालांकि, यह केवल कॉलम नाम, डेटा को आउटपुट नहीं करता था। –

9

इस छोटे स्क्रिप्ट यह करना चाहिए:

- 1. मेज और आउटपुट फ़ाइल यहां चुने गए/इस होना चाहिए केवल इनपुट

select 'mytable' into @tableName; 
select 'c://temp/test.csv' into @outputFile; 

- 2 में स्तंभ नाम मिलता है किसी ऐसे स्वरूप क्वेरी

select group_concat(concat("'",column_name, "'")) into @columnNames from information_schema.columns 
where [email protected]; 

फिट होगा - 3. निर्माण क्वेरी

SET @query = CONCAT(
"select * from 
((SELECT ",@columnNames,") 
UNION 
(SELECT * FROM `",@tableName,"`)) as a 
INTO OUTFILE '", @outputFile, "'"); 

- 4. क्वेरी

PREPARE stmt FROM @query; 
EXECUTE stmt; 
+1

क्या "SELECT * ..." द्वारा क्रमबद्ध कॉलम सूचना_schema.columns क्वेरी से सूचीबद्ध कॉलम के समान क्रम में होंगे? यहाँ ट्रोलिंग नहीं - बस उत्सुक ... –

+0

@ cafe876: इस समाधान के लिए धन्यवाद। मुझे आश्चर्य है कि एस्ट्रोफ़े की जरूरत क्यों है। अगर मैं दोनों एस्ट्रोफ़ेस को हटा देता हूं तो क्वेरी काम नहीं करती है। यदि मैं इस लाइन पर एक बाधा जोड़ना चाहता हूं (उदाहरण: SELECT 'x> 1' INTO @constr) इस पंक्ति पर: (चुनें * से '", @ tableName," 'WHERE", @ cosntr,)) "-> के रूप में काम नहीं करता। कोई उपाय? – giordano

+0

@giordano: यदि आप एक उत्तर प्राप्त करना चाहते हैं, तो आपको शायद "काम नहीं करता" बेहतर परिभाषित करने की आवश्यकता होगी; जैसे आपने क्या त्रुटि संदेश देखा? आपको एक अलग सवाल पूछने की भी आवश्यकता हो सकती है। हालांकि बैकटिक आपको कॉलम नामों का उपयोग करने की अनुमति देता है जिनमें असामान्य वर्ण होते हैं। – LarsH

3

मैं हासिल की है कि इस तरह से निष्पादित करें:

echo "select * from table"| mysql database -B -udbuser -puser_passwd | sed s/\\t/,/g > query_output.csv 

mysql की -B विकल्प कॉलम टैब, जो एसईडी का उपयोग कर के लिए अल्पविराम में बदला जाता है से अलग करती है । ध्यान दें कि शीर्षलेख भी उत्पन्न होते हैं।

+0

बढ़िया, यह मेरे लिए काम किया। – thekingoftruth

+2

बीटीडब्ल्यू, मुझे 'Ctrl-V' 't' के साथ ओएसएक्स पर' \\ t' को प्रतिस्थापित करना पड़ा। – thekingoftruth

+0

@thekingoftruth इसके लिए धन्यवाद! अन्यथा आउटपुट में सभी पत्र टी को अल्पविराम द्वारा प्रतिस्थापित किया जाता है। – crlane

-1

मैंने SELECT ... INTO OUTFILE का उपयोग कर .csv फ़ाइल में बड़ी संख्या में तालिकाओं की सामग्री के निर्यात को स्वचालित करने के लिए एक प्रक्रिया बनाई है। अगर आपको

http://lifeboysays.wordpress.com/2012/06/23/mysql-how-to-export-data-to-csv-with-column-headers/ जैसे कुछ की आवश्यकता है, तो कृपया निम्न का संदर्भ लें।

यह कैफे 876 द्वारा वर्णित विधि का उपयोग करता है, लेकिन एक या पूरी श्रृंखला के लिए काम करेगा, साथ ही आप उपयोग करने के लिए डिलीमीटर और उद्धरण चरित्र सेट कर सकते हैं।

+0

बाद में फ़ाइल को खोजने में सक्षम नहीं था ... हाहा। – thekingoftruth

0

मैंने उपर्युक्त आदेश का उपयोग किया और मेरी आवश्यकता के अनुसार संशोधित किया।
मुझे लगता है कि मैं क्या करने के लिए इस्तेमाल किया आदेश नीचे निम्नलिखित

echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt