为什么 Marshmallow return 是多个项目,但 return 是一个项目?

Why does Marshmallow return empty for multiple items but returns a single item?

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

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

returns:

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

同时 Filter.query.first() returns:

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

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

即:filter_schema = FilterSchema(many=True)

或者更好的是,添加一个名为 filters_schema = FilterSchema(many=True)

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