web-dev-qa-db-ja.com

python:MYSQLdb。大きなテーブルでselect *を実行せずに列名を取得する方法は?

テーブルの列名を取得したいのですが、100万を超えるデータが含まれています。だから私は使用できません:

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では機能しません。誰かがそれを行う方法を知っていますか?

9
MacSanhe

SHOW columns

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

参考までに、これは基本的に desc を使用するのと同じです。

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

これを行う正しい方法は、"SHOW columns FROM table_name"を使用することですが、既存のクエリにLIMITを追加することもできます。

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

試してみてください

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

または

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

どちらも、大量のデータがガタガタ鳴るのを防ぎます。 2つ目はおそらくもっとエレガントです。確認したところ、これでも機能します。

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

その他の情報を見つけるには、以下を使用してください

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