好的,所以我的课程设置如下:
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"}}
尚方宝剑之说
慕婉清6462132
繁华开满天机
相关分类