2011-03-04 101 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]