如何将 Flask SQLAlchemy & Peewee 的查询结果转换成 json?
最近在用 Flask-RESTful 尝试写 API,用 Peewee 做 ORM。
但是,Flask 的查询结果都是对象,并不是 json,我希望能将查询结果以 json 形式返回给客户端:
tasks = Task.select()
return jsonify(tasks)
尝试使用了上面的方法,但是无法正确的返回。不知道我的思路对不对,求解。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
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
首先,最好用to_dict()或者dict这样的东西先把sqlalchemy的对象转换成python dict,然后再把python dict对象转换成json
其次,json能表示的数据能力比SQLALCHEMY要弱,很多python的类型没有直接对应的json格式,比如datetime.datetime类型,所以直接转换是可能会有问题的;所以即使你转换成了python dict,dict里面有些内容还是不能直接转换成json,需要手动写一些code过滤或者转换一些字段
可以使用marshallow这个库,对于Flask有Flask-marshallow。
http://docs.peewee-orm.com/en...
model_to_dict
dict_to_model
先转换为dict,然后随便用jsonify再转就行了。