python: MYSQLdb. ¿Cómo obtener el nombre de las columnas sin ejecutar select * en una tabla grande?

Quiero obtener los nombres de columna de una tabla, pero hay más de un millón de datos en ella. Así que no puedo usar:

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

Y en sqlite3, lo hago así.

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

Pero esto no está funcionando en Python mysqldb. ¿Alguien sabe cómo hacer eso?

Puedes usar las SHOW columns :

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

Para tu información, esto es esencialmente lo mismo que usar desc :

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

La forma correcta de hacer esto sería usar "SHOW columns FROM table_name" , sin embargo, también podría simplemente agregar un LIMIT a su consulta existente:

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

Tratar

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

o

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

Ambos evitan que grandes cantidades de datos sean traicionados. El segundo es quizás más elegante. Acabo de comprobarlo, e incluso esto funciona:

 >>>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),) 
 cursor.execute("SELECT * FROM table_name LIMIT 0") cursor.column_names 

Usa lo siguiente para encontrar otra información.

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