【问题标题】:Rows returned by pyodbc are not JSON serializablepyodbc 返回的行不是 JSON 可序列化的
【发布时间】:2016-04-15 09:52:12
【问题描述】:

我正在尝试使用 Python 中的 pyobc 库检索表的行。

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

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

TypeError: (1, 'Standard', 'For 5 members', 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)

我该如何解决这个错误?

【问题讨论】:

    标签: python sql-server json


    【解决方案1】:

    当您迭代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))
    

    如果您希望它返回键/值对字典而不是值列表,则使用 look at this answer

    【讨论】:

    • 谢谢你的链接兄弟,这就是我需要的
    • list(row) 应该可以在没有生成器表达式的情况下解决问题。
    • 谢谢@kindall - 已申请。
    • 如果数据包含DateTime数据类型,那么这个解决方案需要修改,也将这些字段转换为sting。
    猜你喜欢
    • 2011-10-27
    • 2013-04-26
    • 2021-12-09
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 2021-07-16
    • 2015-01-07
    • 2019-07-05
    相关资源
    最近更新 更多