pyodbc返回的行不是JSON可序列化的

Saj*_*ran 15 python sql-server json

我试图在Python中使用pyobc库检索表的行.

我能够成功检索表的表和字段.现在我有一个名为"apx_roomtypes"的表,其数据如下,

在此输入图像描述

但是,当我将pyodbc行附加到列表然后尝试将列表转储到JSON时,我得到错误

TypeError:(1,'标准','对于5个成员',123)不是JSON可序列化的

这是python代码:

class execute_query:
    def GET(self,r):
          web.header('Access-Control-Allow-Origin',      '*')
          web.header('Access-Control-Allow-Credentials', 'true')
          cnxn = pyodbc.connect(connection_string)
          data = []
          cursor = cnxn.cursor()
          query = web.input().query
          cursor.execute(query)
          rows = cursor.fetchall()
          for row in rows:
              data.append(row)
          return json.dumps(data)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

Mar*_*cny 18

当你迭代时rows,每个row都是一个Row实例,而不是一个实例list.您可以将其转换为列表(可序列化的JSON),如下所示:

rows = cursor.fetchall()
for row in rows:
    data.append([x for x in row]) # or simply data.append(list(row))
Run Code Online (Sandbox Code Playgroud)

如果您希望它返回键/值对的字典而不是值列表,那么请查看此答案.

  • `list(row)`应该没有生成器表达式. (3认同)