2014-05-21 14 views
7

Voglio ottenere i nomi delle colonne di una tabella, ma contiene oltre un milione di dati. quindi non posso usare:python: MYSQLdb. come ottenere il nome della colonna senza eseguire select * in un grande tavolo?

cursor.execute("SELECT * FROM table_name") 
print cursor.description 

E in sqlite3, lo faccio in questo modo

crs.execute("PRAGMA table_info(%s)" %(tablename[0])) 
for info in crs: 
    print info 

Ma questo non funziona in python MySQLdb. Qualcuno sa come farlo?

+1

'mostrare le colonne da

'; –

+1

Allora ti meriti un upvote. –

risposta

11

È possibile utilizzare SHOW columns:

cursor.execute("SHOW columns FROM table_name") 
print [columns[0] for column in cursor.fetchall()] 

Cordiali saluti, questo è essenzialmente lo stesso che utilizza desc:

cursor.execute("desc table_name") 
print [columns[0] for column in cursor.fetchall()] 
+0

Grazie mille. Sei il primo ragazzo con la migliore risposta. Comunque tutti i ragazzi qui sono eccellenti, ma posso solo dare una "risposta giusta", grazie ragazzi :) – MacSanhe

5

Il modo corretto per farlo sarebbe quello di utilizzare "SHOW columns FROM table_name" Tuttavia, si potrebbe anche è sufficiente aggiungere un LIMIT alla query esistente:

cursor.execute("SELECT * FROM table_name LIMIT 0") 
print cursor.description 
3

Prova

cursor.execute("SELECT * FROM table_name LIMIT 1") 

o

cursor.execute("SELECT * FROM table_name WHERE 1=0") 

Sia evitare enormi quantità di dati che vengono scosso. Il secondo è forse più elegante. Ho appena controllato, e anche questo funziona:

>>>cursor.execute("SELECT LEFT(long_text,5) as short_text FROM table_name WHERE 1=0") 
>>>print cursor.description 
(('short_text', 253, 0, 5, 5, 31, 0),) 
0
cursor.execute("SELECT * FROM table_name LIMIT 0") 
cursor.column_names 

Utilizzare la seguente per trovare altre informazioni

[v for v in dir(cursor) if v.find("_")] 
Problemi correlati