gpt4 book ai didi

javascript - 如何从 sqlalchemy 中 jsonify 对象?

转载 作者:行者123 更新时间:2023-11-30 17:45:58 25 4
gpt4 key购买 nike

我正在使用 Flask、SQLAlchemy 和 javascript。我需要通过 AJAX 将查询结果以 json 格式传递给 javascript,但我一直收到此错误:

raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <model.Cloud object at 0x7f72e40c5910> is not JSON serializable'

我的代码如下:

@app.route('/past/<user_id>')
def get_past_clouds(user_id):
if user_id:
clouds = model_session.query(model.User).filter_by(id=user_id).first().clouds
if clouds != "":
clouds_d = {}
for idx, cloud in enumerate(clouds):
clouds_d[idx] = cloud
return jsonify(json_list=clouds_d)
return None

忽略我之前的评论,它允许请求工作但返回的所有对象都是未定义的。

最后是这样的:

clouds_d = dict( (cloud.name, [ photo.to_dict() for photo in cloud.photos ]) for cloud in clouds )
return jsonify(clouds_d)

最佳答案

正如您所发现的,SQLAlchemy 模型本身不能序列化为 JSON。

您采用的方法 - 从您的模型实例的属性手动构造一个 dict - 完成了工作,但是如果您需要对多个模型进行 jsonify,处理序列化的值转换,或支持反序列化(将 JSON 转换回 SQLAlchemy模型实例),你会发现自己编写了很多乏味的代码。

更好的解决方案是使用 SQLAlchemy 的序列化/反序列化扩展库,例如 SQLAthanorMarshmallow-SQLAlchemy (完全披露:我是 SQLAthanor 的作者)。

使用这些库中的任何一个,您基本上可以将 SQLAlchemy 模型序列化和反序列化为其他格式,或者将它们反序列化回 SQLAlchemy 模型实例。

对于 SQLAthanor,您基本上可以通过一个方法调用完成工作:

json_result = model_instance.dump_to_json()

或(使用更多配置,让您可以进行更细粒度的控制):

json_result = model_instance.to_json()

您还可以序列化为 dict、YAML 或 CSV。

逆向过程是:

model_instance = ModelClass.new_from_json(json_result)

希望这对您有所帮助!

关于javascript - 如何从 sqlalchemy 中 jsonify 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com