python - SQLAlchemy & SQLAlchemySchema GET 返回 jsonified 数据为空字典
问题描述
这是我的模型:
class Todo(db.Model):
__tablename__ = "todos"
id = db.Column(db.Integer, primary_key=True)
description = db.Column(db.String(), nullable=False)
class TodoSchema(ma.SQLAlchemySchema):
class Meta:
model = Todo
这是我的路线
@app.route("/data", methods=["GET"])
def data():
data = Todo.query.all()
print(len(data)) #28
print(data) #[<Todo 1>, <Todo 2>, <Todo 3>, <Todo 4>, <Todo 5>, <Todo 6>, <Todo 7>, <Todo 8>, <Todo 9>, <Todo 10>, <Todo 11>, <Todo 12>, <Todo 13>, <Todo 14>, <Todo 15>, <Todo 16>, <Todo 17>, <Todo 18>, <Todo 19>, <Todo 20>, <Todo 21>, <Todo 22>, <Todo 23>, <Todo 24>, <Todo 25>, <Todo 26>, <Todo 27>, <Todo 28>]
todo_schema = TodoSchema()
output = todo_schema.dump(data)
print(output) # {}
return output
当我做一个循环时,它看起来像这样:
for item in data:
print(item.description)
walk the dog
buy groceries
....
您可以print
在评论中看到它背后的语句的输出。所以我想要的是从我可以返回的数据对象中创建一个 JSON 对象。输出结果为空字典的原因是什么?有没有像这样的简单解决方案
data = Todo.query.all()
return jsonify({data})
解决方案
你的代码有一个问题。您正在从数据库中获取所有待办事项
Todo.query.all()
但是当你实例化你的模式时,你没有指定很多参数。将您的 Schema 实例化更改为
todo_schema = TodoSchema(many=True)
引用文档
many – 如果 obj 是一个集合,则应设置为True,以便将对象序列化为列表。
供您参考,请访问https://marshmallow.readthedocs.io/en/latest/api_reference.html#marshmallow.Schema并前往marshmallow.Schema类的参数
更新
正如评论中提到的,还有另一个问题,它现在返回一个空字典列表。为此,这是一个参考链接 https://marshmallow-sqlalchemy.readthedocs.io/en/latest/api_reference.html
尝试使用ModelSchema而不是SQLAlchemySchema。
推荐阅读
- java - 如何在android Studio中伪装android xml可点击链接?
- javascript - 在 Angular 应用程序上将 XML RSS 提要转换为 Json
- javascript - 如何更新文本指示器以显示进度条的进度?
- haskell - Haskell prettyprinter中的空(零高度)文档
- gitlab - 在 GitLab 的 docker 上运行邮递员脚本时出现 2 个错误。相同的脚本通过 Postman 和 Newman 运行良好
- unity3d - Unity 游戏对象由墙上的真实光点控制
- linq - 取一个并跳过子表中的其他重复项
- r - 将部分日期重置为 R 中的默认完整日期
- mongodb - 猫鼬保存填充的文档,其中至少有 1 个死亡所需的参考
- java - Springboot战争部署到tomcat 8.5