2011-03-04 147 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

您可以使用列表中理解上的光標描述屬性排序的列名的列表:

column_names = [item[0] for item in cursor.description]