2011-01-06 10 views
19

दिखाने के लिए मैं निम्नलिखित है की जरूरत है:अजगर का उपयोग करना, सीएसवी को mysql क्वेरी लिखने के लिए फ़ील्ड नाम

import MySQLdb as dbapi 
import sys 
import csv 

dbServer='localhost' 
dbPass='supersecretpassword' 
dbSchema='dbTest' 
dbUser='root' 

dbQuery='SELECT * FROM pbTest.Orders;' 

db=dbapi.connect(host=dbServer,user=dbUser,passwd=dbPass) 
cur=db.cursor() 
cur.execute(dbQuery) 
result=cur.fetchall() 

c = csv.writer(open("temp.csv","wb")) 
c.writerow(result) 

यह एक विकृत गड़बड़ पैदा करता है। मैं मुद्रण रिकॉर्ड [0] आदि का उपयोग करने से परिचित हूं। यह सुनिश्चित नहीं है कि मुझे प्रारूपण को सेट करने के बारे में कैसे जाना चाहिए। एक कंसोल में एक प्रश्न क्या होगा जैसे कुछ उत्पादन करने के लिए। मैं mysql सर्वर से एक सरल INTFILE नहीं कर सकता।

उत्तर

15

result पंक्तियों की एक सूची है।

for row in result: 
    c.writerow(row) 
+0

यह बहुत अच्छा धन्यवाद है, कोई विचार है कि मैं फील्ड नाम भी कैसे लिख सकता हूं? – Mathnode

+4

@teatime - आप 'परिणाम [0] .keys' (या समतुल्य' row.keys'। – mtrw

+1

से फील्डनाम प्राप्त कर सकते हैं दुर्भाग्यवश, यह उत्तर पूरी तरह से प्रश्न के शीर्षक ("फ़ील्ड नाम दिखाने की आवश्यकता") का जवाब नहीं देता है। @ mtrw की टिप्पणी में मदद मिलती है, लेकिन दिए गए कोड पर लागू नहीं है (tuple ऑब्जेक्ट में कोई विशेषता नहीं है ')। यह लागू हो सकता है यदि कर्सर एक शब्दकोश कर्सर था, यानी' dbconn.cursor (dictionary = True) 'का उपयोग करके बनाया गया था। – LarsH

1

मुझे थोड़ा पाइथन पता है, लेकिन थोड़ी सी गुगल के बाद, क्या आप लेखक (एस के साथ) का उपयोग कर रहे हैं जो लेखक की बजाय एकाधिक पंक्तियां लिखता है, जो एक पंक्ति की अपेक्षा करता है।

जैसा कि मैंने कहा है कि यह मेरे से अंधेरे में एक स्टैब है।

23

आप पाशन के बिना csv फ़ाइल के लिए सभी परिणाम डंप कर सकते हैं:: तो आप उस सूची के माध्यम से पुनरावृति और प्रत्येक पंक्ति लिखने के लिए की आवश्यकता होगी

rows = cursor.fetchall() 
fp = open('/tmp/file.csv', 'w') 
myFile = csv.writer(fp) 
myFile.writerows(rows) 
fp.close() 
+1

शानदार उत्तर। मैं बस 'फ़ाइल' चर बदल दूंगा 'फाइल' के बाद से माईफाइल की तरह कुछ एक कीवर्ड है। – Will

+1

यह काम अच्छा है लेकिन वैसे भी मैं फील्ड नाम/कॉलम नाम भी प्राप्त कर सकता हूं। –

+0

धन्यवाद, यह बहुत आसान पाया। –

1

बस जवाब @jwhat को एक और बात जोड़ने ।

यदि आप विंडोज़ में इस सीएसवी फ़ाइल को खोलना चाहते हैं, तो आपको अतिरिक्त खाली लाइनों को संभालने की आवश्यकता होगी।

बस, निम्नलिखित करने के लिए कोड बदलने के रूप में 2.7 में डिफ़ॉल्ट lineterminator है \ r \ n

myFile = csv.writer(fp, lineterminator='\n') 
+0

धन्यवाद! मैं खुले एक्सेल और वहां से रिक्त रेखाएं हटा रहा हूं, और यह हमेशा दर्द होता था, और मैंने इसे रोकने के लिए कभी नहीं सोचा। – Mwspencer

0

ने इस भर आता है किसी के लिए भी कॉलम हेडर नाम के साथ उत्तर: (मैं करने के लिए Jwhat की विधि का उपयोग कर रहा हूँ सीएसवी को लिखें)

result = cur.fetchall() 

#Getting Field Header names 
column_names = [i[0] for i in cur.description] 
fp = open('Result_Set.csv' 'w') 
myFile = csv.writer(fp, lineterminator = '\n') #use lineterminator for windows 
myFile.writerow(column_names) 
myFile.writerows(result) 
fp.close() 
संबंधित मुद्दे