Pythonのpyodbcで実行したSELECT文のカラム名を取得する方法
PythonのpyodbcでSQLServer上で実行したSELECT文のカラム名は普通には取得できません。
execute()した結果にある「description」プロパティを参照して取得する必要があります。
pyodbcで実行したSELECT文のカラム名を取得する
pyodbcで実行したSELECT文戻り値は
(1, 'test1', 20, 0), (2, 'test2', 30, 1)
のように「カラム名」はありません。
カラム名を取得するにはexecute()した結果にある「description」プロパティを参照します。
以下は実行したSQLをカラム名でアクセスできるようにしたソースです。
import pyodbc import pprint #SQLServerへの設定 driver= "{SQL Server}" server = "SQLServerが動作するサーバ名" database = "データベース名" port = "SQLServerで利用するポート番号" trusted_connection = "yes" #SQLServerへ接続 conn = pyodbc.connect( "DRIVER=" + driver + ";" + "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "PORT=" + port + ";" + "Trusted_Connection=" + trusted_connection + ";" ) #SQL実行 cursor = conn.cursor() rc = cursor.execute( "SELECT * FROM test_table" ) fetch_ret = cursor.fetchall() #fetchall()の戻り値 pprint.pprint( "fetchall()={0}".format( fetch_ret )) #カラム名を取得して配列にコピー fetch_array = [] for data_cnt in range( len( fetch_ret )) : columns = [column[0] for column in rc.description] tmp = {} for col_cnt in range( len( columns )) : print( "columns name=[{0}] value=[{1}]".format( columns[ col_cnt ], fetch_ret[ data_cnt ][ col_cnt ] ) ) tmp[ columns[ col_cnt ] ] = fetch_ret[ data_cnt ][ col_cnt ] fetch_array.append( tmp ) #カラム名を使ってデータ取得 pprint.pprint( "fetch_array()={0}".format( fetch_array )) #カラム名を使ってデータ取得 print( "2レコード目のnameは「{0}」です。".format( fetch_array[ 1 ][ "name" ] )) #SQLServerを切断 cursor.close() conn.close()
以下が実行結果です。
#fetchall()の戻り値 "fetchall()=[(1, 'test1', 20, 0), (2, 'test2', 30, 1)]" #カラム名を取得して配列にコピー columns name=[no] value=[1] columns name=[name] value=[test1] columns name=[age] value=[20] columns name=[gender] value=[0] columns name=[no] value=[2] columns name=[name] value=[test2] columns name=[age] value=[30] columns name=[gender] value=[1] #カラム名を使ってデータ取得 ("fetch_array()=[{'no': 1, 'name': 'test1', 'age': 20, 'gender': 0}, {'no': 2, " "'name': 'test2', 'age': 30, 'gender': 1}]") #カラム名を使ってデータ取得 2レコード目のnameは「test2」です。
まとめ
execute()した結果にある「description」プロパティを参照することでpyodbcで実行したSELECT文のカラム名が取得でき、再編集は必要ですが、処理結果をカラム名を使ってアクセスすることができました。
以上、「pyodbcで実行したSELECT文のカラム名を取得する方法」でした。
おススメのPythonが学べるプログラミングスクール