python: MYSQLdb. как получить имя столбцов без выполнения select * в большой таблице?

Я хочу получить имена столбцов таблицы, но там более миллиона данных. Поэтому я не могу использовать:

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

и в sqlite3, я делаю это таким образом

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

но это не работает в Python mysqldb. Кто-нибудь знает, как это сделать?

4 ответов


можно использовать SHOW columns:

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

FYI, это по существу то же самое, что и использование desc:

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

правильный способ сделать это - использовать "SHOW columns FROM table_name" однако вы также можете просто добавить LIMIT к вашему существующему запросу:

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

попробовать

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

или

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

оба предотвращают огромное количество данных, которые гремят. Вторая, пожалуй, более элегантна. Я только что проверил, и даже это работает:

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

используйте следующее, чтобы найти другую информацию

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