2011-03-04 58 views

答えて

14

pymssqlはPython DB-APIをサポートすると主張しているので、カーソルオブジェクトから.description属性を取得できるはずです。

.DESCRIPTION

 This read-only attribute is a sequence of 7-item 
     sequences. 

     Each of these sequences contains information describing 
     one result column: 

     (name, 
      type_code, 
      display_size, 
      internal_size, 
      precision, 
      scale, 
      null_ok) 

したがって、 "内側の" 配列のそれぞれの最初の項目は、各列の名前です。

0

これは基本的な解決策であり、最適化が必要ですが、以下の例では、列ヘッダーと列値の両方をリストに返します。

import pymssql 

def return_mssql_dict(sql): 
    try: 

     con = pymssql.connect(server, user, password, database_name) 
     cur = con.cursor() 
     cur.execute(sql) 

     def return_dict_pair(row_item): 
      return_dict = {} 
      for column_name, row in zip(cur.description, row_item): 
       return_dict[column_name[0]] = row 
      return return_dict 

     return_list = [] 
     for row in cur: 
      row_item = return_dict_pair(row) 
      return_list.append(row_item) 

     con.close() 

     return return_list 

    except Exception, e: 
     print '%s' % (e) 

2

単一カンマ区切りの行に列名を取得します。

colNames = "" 
for i in range(len(cursor.description)): 
    desc = cursor.description[i] 
     if i == 0: 
      colNames = str(desc[0]) 
     else: 
      colNames += ',' + str(desc[0]) 
     print colNames 

また、列名をリストに渡して.joinを使用して文字列として取得することもできます。

colNameList = [] 
    for i in range(len(cursor.description)): 
     desc = cursor.description[i] 
     colNameList.append(desc[0]) 

     colNames = ','.join(colNameList) 
     print colNames 
+0

を(cursor.description) –

+0

に参加。 .descriptionは7アイテムタプルのリストなので、 "、"。join(cursor.description)はそれを行いません。 – Robert

1

カーソルのdescription属性にリストの内包表記を使用して注文した列名のリストを作成することができます:「」それを行うにはPythonの方法がある本当に

column_names = [item[0] for item in cursor.description] 
関連する問題