使用pymssql从查询结果中获取列名

时间:2011-03-04 04:46:22

标签: python database pymssql

有没有办法从pymssql结果中获取列名?如果我指定as_dict = True,我会返回一个包含所有列标题的字典,但由于它是字典,因此不会对它们进行排序。

4 个答案:

答案 0 :(得分:15)

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)

因此,每个“内部”序列中的第一项是每列的名称。

答案 1 :(得分:3)

要在一个逗号分隔的行上获取列名称。

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

答案 2 :(得分:2)

您可以使用游标描述属性上的列表解析创建有序列名列表:

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

答案 3 :(得分: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)