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("_")]