2011-01-06 4 views
19

Ho il seguente:con Python di scrivere query MySQL in formato CSV, hanno bisogno di mostrare i nomi dei campi

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) 

Questo è produce un pasticcio confuso. Ho familiarità con l'utilizzo del record di stampa [0], ecc. Non sono sicuro di come procedere per impostare la formattazione. per produrre qualcosa di simile a una query in una console. Non riesco a creare un semplice INTO OUTFILE dal server mysql.

risposta

15

result è un elenco di righe. Quindi, è necessario scorrere quella lista e scrivere ogni riga:

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

questo è fantastico grazie, qualche idea su come posso scrivere anche i nomi dei campi? – Mathnode

+4

@teatime - È possibile ottenere i nomi di campo da 'result [0] .keys' (o equivalentemente' row.keys'. – mtrw

+1

Sfortunatamente, questa risposta non risponde completamente al titolo della domanda ("necessità di mostrare i nomi dei campi"). @ Il commento di mtrw aiuta, ma non è applicabile al codice dato (l'oggetto tupla non ha 'chiavi' di attributo). Potrebbe essere applicabile se il cursore fosse un cursore dizionario, cioè creato usando 'dbconn.cursor (dictionary = True)'. – LarsH

1

Conosco un piccolo pitone, ma dopo un po 'di ricerca su google, dovresti usare gli scrittori (con una S) che scrivono più righe, piuttosto che la scrittura che si aspetta una singola riga.

Come ho detto questo è un po 'una pugnalata al buio da parte mia.

23

È possibile scaricare tutti i risultati al file CSV senza loop:

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

Grande risposta. Vorrei solo cambiare la variabile 'file' a qualcosa come myfile poiché 'file' è una parola chiave. – Will

+1

Questo lavoro s grande, ma è comunque possibile ottenere i nomi dei campi/nomi delle colonne, per favore. –

+0

Grazie, trovato molto utile. –

1

Basta aggiungere una cosa da @jwhat risposta .

Se si intende aprire questo file csv in Windows, sarà necessario gestire le righe vuote supplementari.

basta modificare il codice al seguente, come il lineterminator default in 2.7 è \ r \ n

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

Grazie! Sono stato aperto excel e rimosso le righe vuote da lì, ed è sempre stato un dolore, e non ho mai capito di fermarlo. – Mwspencer

0

risposta con i nomi di intestazione di colonna per chi si imbatte in questo: (sto usando il metodo di Jwhat a scrivi a csv)

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() 
Problemi correlati