【问题标题】:Why does Marshmallow return empty for multiple items but returns a single item?为什么 Marshmallow 对多个项目返回空但返回单个项目?
【发布时间】:2020-03-25 23:18:20
【问题描述】:

我正在使用 Flask 和 marshmallow 构建一个 API 来格式化查询结果,但由于某种原因 Filter.query.all() 返回空,但是当我用 Filter.query.first() 替换它时,它返回第一个过滤器。我还仔细检查了我的数据库以确保存在多个条目。我在这里做错了什么吗?

from Model import db, Filter

class FilterSchema(ma.Schema):
    id = fields.Integer()

filter_schema = FilterSchema()

### returns list of all filters in Filter db

def get(self):
    filters = Filter.query.all()
    filters = filter_schema.dump(filters).data
    return {'status': 'success', 'data': filters}, 200

返回:

{
    "status": "success",
    "data": {}
}

Filter.query.first() 返回时:

{
    "status": "success",
    "data": {
        "id": 1
    }
}

【问题讨论】:

  • 如果没有看到 FilterFilterSchema 的样子,很难猜到。 FilterSchema 中的 dump 是否返回具有 data 属性的对象?另外,当你说它在使用query.first() 时有效,你的意思是你只是替换filters = Filter.query.all() 行或其他东西?
  • FilterSchema 只是一个棉花糖模式,它显示返回行的 id:class FilterSchema(ma.Schema): id = fields.Integer()。是的,我的意思是用Filter.query.first() 替换Filter.query.all(),我将编辑问题以澄清。

标签: python flask marshmallow flask-marshmallow


【解决方案1】:

事实证明,对于 marshmallow 中的模式,您需要指定模式是否正在转储多个条目。如果有多个,请将many=True 添加到您的FilterSchema()

即:filter_schema = FilterSchema(many=True)

或者更好的是,添加一个不同的变量,称为 filters_schema = FilterSchema(many=True)

并根据您要返回的数据选择使用哪一个。

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 2020-05-15
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多