8

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

4

4 回答 4

16

pymssql 声称支持 Python DB-API,因此您应该能够.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)

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

于 2011-03-04T05:27:20.970 回答
4

在单个逗号分隔的行上获取列名。

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
于 2015-10-20T06:35:54.283 回答
4

您可以使用游标描述属性上的列表推导来创建有序列名称的列表:

column_names = [item[0] for item in cursor.description]
于 2016-11-08T19:27:54.373 回答
1

这是一个基本解决方案,需要优化,但下面的示例在列表中返回列标题和列值。

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)

于 2015-09-16T21:52:45.703 回答