python - Flask Marshmallow - 模式返回属性错误?
问题描述
我正在尝试从看起来像的数据库中返回所有关键字的列表
[
'foo',
'bar',
'baz',
]
模型
class Keyword(db.Model, SurrogatePK):
__tablename__ = 'keywords'
keyword = Column(db.Text, nullable=False, unique=True)
def __repr__(self):
"""Represent instance as a unique string."""
return '<Keyword({keyword})>'.format(keyword=self.keyword)
架构
class KeywordSchema(ma.ModelSchema):
class Meta:
model = Keyword
然后 ,
keywords_schema = KeywordSchema(many=True, only='keyword')
路线
class Keywords(Resource):
def get(self):
'''Head to http://localhost:5000/api/v1/keywords
Returns a list of all keywords.
'''
keywords = Keyword.query.all()
result = keywords_schema.dump(keywords)
return jsonify({'keywords': result})
这是抛出一个 `AttributeError'
部分跟踪
File "C:\Users\ddonovan\DHG\web\flask-research\Query-Metadata\metadata\views.py", line 33, in get
result = keywords_schema.dump(keywords)
File "c:\users\ddonovan\.edm\envs\flask\lib\site-packages\marshmallow\schema.py", line 491, in dump
self._update_fields(processed_obj, many=many)
File "c:\users\ddonovan\.edm\envs\flask\lib\site-packages\marshmallow\schema.py", line 760, in _update_fields
ret = self.__filter_fields(field_names, obj, many=many)
File "c:\users\ddonovan\.edm\envs\flask\lib\site-packages\marshmallow\schema.py", line 834, in __filter_fields
'"{0}" is not a valid field for {1}.'.format(key, obj))
AttributeError: "w" is not a valid field for <Keyword(numpy)>
解决方案
我的 KeywordSchema 实例需要是keywords_schema = KeywordSchema(many=True, only=['keyword'])
然后在我的端点
class Keywords(Resource):
def get(self):
'''Head to http://localhost:5000/api/v1/keywords
Returns a list of all keywords.
Example Output:
[
"foo",
"bar",
"baz"
]
'''
keywords = Keyword.query.all()
result = keywords_schema.dump(keywords)
return jsonify([d['keyword'] for d in result.data])
推荐阅读
- css - 导航栏,一些元素位于中心,一些元素右对齐。图片需要调整大小
- c# - 根据下拉结果填充列表 ASP.NET MVC C#
- solidity - 创建一个智能合约,持有并发送资金以设置钱包
- azure-data-explorer - Kusto 查询以获取不为空的最新列值(对于每一列)
- mysql - 在 MySql 中合并两行
- google-apps-script - Google 表单回复 + 其他数据触发电子邮件
- batch-file - 批处理:如何按扩展对输出进行排序
- javascript - Vuejs - 如何获取嵌套元素
- java - 使用 Apache Beam 将重复的字符串写入 BigQuery
- reactjs - 将调度函数传递给辅助函数