如何将 Flask SQLAlchemy & Peewee 的查询结果转换成 json?

发布于 2022-08-28 00:43:50 字数 243 浏览 30 评论 0

最近在用 Flask-RESTful 尝试写 API,用 Peewee 做 ORM。
但是,Flask 的查询结果都是对象,并不是 json,我希望能将查询结果以 json 形式返回给客户端:

tasks = Task.select()
return jsonify(tasks)

尝试使用了上面的方法,但是无法正确的返回。不知道我的思路对不对,求解。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

稀香 2022-09-04 00:43:50

Flask-RESTful 有一个专门做这个的东西,叫 marshal_with,
具体介绍在这里:http://flask-restful.readthedocs.org/en/latest/fields.html
我一般都是用它来格式化返回值

marshal_with 实际做的只是把数据库对象转换成 dict 或者 list of dict
把 dict 转换成 json 是由 Flask-RESTful 自动完成的,不用手动调用 jsonify


如果你觉得上面的方法太麻烦,这里还有一个工具,对 Flask-RESTful 进行了扩展,其中就包括简化 marshal_with 操作(marshal.py),以及加强 json 转换功能(extend_json.py, json_encoder_manager.py)。

你可以参考下它里面的代码
(不过这个工具是针对 SQLAlchemy 的,对于 Peewee 可能需要修改一下)

https://github.com/anjianshi/flask-restful-extend

半透明的墙 2022-09-04 00:43:50

首先,最好用to_dict()或者dict这样的东西先把sqlalchemy的对象转换成python dict,然后再把python dict对象转换成json

其次,json能表示的数据能力比SQLALCHEMY要弱,很多python的类型没有直接对应的json格式,比如datetime.datetime类型,所以直接转换是可能会有问题的;所以即使你转换成了python dict,dict里面有些内容还是不能直接转换成json,需要手动写一些code过滤或者转换一些字段

ˉ厌 2022-09-04 00:43:50

可以使用marshallow这个库,对于Flask有Flask-marshallow。

挽清梦 2022-09-04 00:43:50

http://docs.peewee-orm.com/en...
model_to_dict
dict_to_model

先转换为dict,然后随便用jsonify再转就行了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文