【问题标题】:Azure SQL DB query convert to JSON with Flask API使用 Flask API 将 Azure SQL DB 查询转换为 JSON
【发布时间】:2021-05-22 11:57:05
【问题描述】:

我正在尝试通过烧瓶 API 查询托管在 Azure 上的 SQL Server 数据库并将结果转换为 JSON,我正在尝试如下。这是有效的,但是结果是通过转义字符来实现的。数据中似乎没有任何明显的特殊字符。如果我使用 API 并执行带有参数的存储过程,则 json 将以我想要的格式通过。有关如何更改此内容以获得标准 json 格式的任何建议?

app = Flask(__name__)

api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('customer')

conn = pyodbc.connect(serverconnectionstring)

class Customer(Resource):
    def get(self):     
        cursor = conn.cursor()    
        query = "SELECT * FROM [dbo].[testforjson]"
        result = cursor.execute(query)
        items = [dict(zip([key[0] for key in cursor.description], row)) for row in result]
        jsonitems = json.dumps(items)
        return jsonitems

api.add_resource(Customer, '/customer')

if __name__ == '__main__':
    app.run()


example output: 
"[{\"field1\": \"B2653\", \"field2\": \"ERLOP\"}, {\"field1\": \"C2653\", \"field2\": \"ERLOP\"}]


desired output:
[
  {
    "field1": "B2653",
    "field2": "ERLOP"
  },
  {
    "field1": "C2653",
    "field2": "ERLOP"
  }
]

【问题讨论】:

  • 您是否尝试直接从 get 方法返回 items
  • 我没有尝试过,看起来它有效!谢谢!
  • (快速解释:如果你返回一个对象,flask 将尝试返回一个 json 表示并设置 json 内容类型。如果你返回一个字符串,flask 不知道你的意图,并发送一个字符串内容类型。然后由您的客户确定意图是什么。在大多数情况下,字符串内容类型意味着结果以字符串形式呈现给您。但您也可以忽略内容类型并将该字符串解析为 json )
  • 感谢您的补充,它有很大帮助。
  • 嗨@khennenf,现在错误解决了吗?

标签: python json api azure-sql-database


【解决方案1】:

非常感谢@njzk2 的帮助和详细解释。我帮助发布它作为结束这个问题的答案:

请尝试直接从该 get 方法返回项目:

  • 快速解释:如果你返回一个对象,flask 会尝试 返回一个 json 表示并设置 json 内容类型。如果你 返回一个字符串,flask 不知道你的意图,并发送一个 字符串内容类型。然后由您的客户决定 意图是。在大多数情况下,字符串内容类型意味着 结果以字符串的形式呈现给您。但是你也可以忽略 内容类型并将该字符串解析为 json

很高兴听到它对您有用。再次感谢@njzk3。这可能对其他社区成员有益。

【讨论】:

    猜你喜欢
    • 2011-11-09
    • 1970-01-01
    • 2019-02-03
    • 2017-02-01
    • 2020-10-08
    • 2016-03-28
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    相关资源
    最近更新 更多