为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 SQLAlchemy 和 FastAPI 中的 json.dumps 删除 json

如何使用 SQLAlchemy 和 FastAPI 中的 json.dumps 删除 json

白衣染霜花 2022-11-09 16:47:49
好的,所以我的课程设置如下:class ToDictMixin(object):    def to_dict(self, camelcase=True):        if camelcase:            return {to_camelcase(column.key): getattr(self, attr) for attr, column in self.__mapper__.c.items()}        else:            return {column.key: getattr(self, attr) for attr, column in self.__mapper__.c.items()}class Company(Base, ToDictMixin):    __tablename__ = 'companies'    number = Column(Integer, primary_key=True)    name = Column(String)    incorporated = Column(Date)我也有这些功能:def to_camelcase(s):    return re.sub(r'(?!^)_([a-zA-Z])', lambda m: m.group(1).upper(), s)def alchemyencoder(obj):    """    JSON encoder function for SQLAlchemy special classes.    """    if isinstance(obj, datetime.date):        return obj.isoformat()    elif isinstance(obj, decimal.Decimal):        return float(obj)def to_json(self, rel=None):    return json.dumps(self.to_dict(), default=alchemyencoder)在我的 FastAPI 文件中,我执行以下操作:@app.get("/testrequest")def test_request():    query = SESSION.query(Company).order_by(Company.number).filter_by(name="PAARTI LTD")    return {"company": to_json(i) for i in query}在加载此页面之前,我在 python 控制台中测试了以下内容:>>> query = SESSION.query(Company).order_by(Company.number).filter_by(name="PAARTI LTD")>>> a = query[0]>>> a.to_dict(){'created': datetime.datetime(2020, 5, 7, 13, 10, 5), 'number': 12585493, 'name': 'PAARTI LTD', 'incorporated': datetime.date(2020, 5, 5)}>>> to_json(a)'{"created": "2020-05-07T13:10:05", "number": 12585493, "name": "PAARTI LTD", "incorporated": "2020-05-05"}'这对我来说是正确的。这正是我希望它显示的方式。但是,在我的浏览器中测试http://127.0.0.1:8000/testrequest时,我得到以下信息:{"company":"{\"created\": \"2020-05-07T13:10:05\", \"number\": 12585493, \"name\": \"PAARTI LTD\", \"incorporated\": \"2020-05-05\"}"}我不明白为什么它试图在网络响应中逃避这些反斜杠。我怎样才能解决这个问题,以获得以下正确的 json 响应:{"company":{"created": "2020-05-07T13:10:05", "number": 12585493, "name": "PAARTI LTD", "incorporated": "2020-05-05"}}
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

import json


@app.get("/testrequest")

def test_request():

    query = SESSION.query(Company).order_by(Company.number).filter_by(name="PAARTI LTD")

    return {"company": json.loads(to_json(i) for i in query)}

只需使用 json.loads(str)


查看完整回答
反对 回复 2022-11-09
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您可以像这样返回 JSON:


        @router.get('/statistics')

        async def get_statistics():

            return self.json_data

对我来说,它就像一个魅力


{

    "CLIENT": [

        {

            "topics": [

                "topic"

            ],

        }

    ]

}


查看完整回答
反对 回复 2022-11-09
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

试试这个,先构建字典,然后立即转储到 json。

@app.get("/testrequest") def test_request():    query = SESSION.query(Company).order_by(Company.number).filter_by(name="PAARTI LTD")    return json.dumps({"company": i.to_dict() for i in query}, default=alchemyencoder)


查看完整回答
反对 回复 2022-11-09
  • 3 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号