1. ホーム
  2. python

[解決済み] MySQLの クエリからカラム名やエイリアスを取得する

2023-02-15 14:53:55

質問

私は SHOW COLUMNS コマンドを使用します。

SQLクエリを指定し、実行すると、クエリ結果を表す行と列を含む結果セットを返す、heidisqlと同様に動作するアプリケーションを作成したいと思います。結果セットのカラム名は、SQLクエリで定義された選択されたカラムと一致する必要があります。

私の Python プログラムでは ( MySQLdb を使用)私のクエリは行と列の結果のみを返し、列名は返しません。 次の例では、カラム名は次のようになります。 ext , totalsize そして filecount . SQLは最終的にプログラムから外部に出すことになります。

これを動作させるために考えられる唯一の方法は、選択された列名を抽出するために、独自の SQL パーサー ロジックを書くことです。

提供された SQL の列名を取得する簡単な方法はありますか? 次に、クエリが返す列の数を知る必要があります。

# Python

import MySQLdb

#===================================================================
# connect to mysql
#===================================================================

try:
    db = MySQLdb.connect(host="myhost", user="myuser", passwd="mypass",db="mydb")
except MySQLdb.Error, e:
    print "Error %d: %s" % (e.args[0], e.args[1])
    sys.exit (1)

#===================================================================
# query select from table
#===================================================================

cursor = db.cursor ()   

cursor.execute ("""\
     select ext,
        sum(size) as totalsize,
        count(*) as filecount
     from fileindex
    group by ext
    order by totalsize desc;
""")

while (1):
    row = cursor.fetchone ()
    if row == None:
        break
    print "%s %s %s\n" % (row[0], row[1], row[2])

cursor.close()
db.close()      

どのように解決するのですか?

cursor.descriptionは、それぞれの[0]が列のヘッダーであるタプルのタプルを与えます。

num_fields = len(cursor.description)
field_names = [i[0] for i in cursor.description]