2014-05-21 20 views
7

Chcę uzyskać nazwy kolumn tabeli, ale zawiera ona ponad milion danych. Więc nie mogę używać:python: MYSQLdb. jak uzyskać nazwę kolumny bez wykonywania wyboru * w dużym stole?

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

A w sqlite3, robię to w ten sposób

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

Ale to nie działa w Pythonie MySQLdb. Czy ktoś wie, jak to zrobić?

+1

'przedstawiają kolumny z

'; –

+1

Następnie zasługujesz na przegraną. –

Odpowiedz

11

Można użyć SHOW columns:

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

FYI, to jest w zasadzie taki sam, jak przy użyciu desc:

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

Dziękuję bardzo. Jesteś pierwszym facetem z najlepszą odpowiedzią. Jednak wszyscy tutaj są wspaniali, ale mogę dać tylko jedną "właściwą odpowiedź", dziękuję wam :) – MacSanhe

5

poprawny sposób to zrobić byłoby użyć "SHOW columns FROM table_name" jednak, można również po prostu dodaj LIMIT do istniejącego zapytania:

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

Spróbuj

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

lub

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

Zarówno zapobiec ogromne ilości danych są brzęczały. Drugi jest być może bardziej elegancki. Właśnie zaznaczone, a nawet to działa:

>>>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 

Użyj następującego znaleźć INNE INFORMACJE

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