Python 3.x SQLAthanor:仅序列化为json特定字段

Python 3.x SQLAthanor:仅序列化为json特定字段,python-3.x,sqlalchemy,Python 3.x,Sqlalchemy,有没有办法使用SQLAthanor序列化只包含特定字段的SQLAlchemy模型?文档中没有提到它,所以我找到的唯一方法是手动过滤结果 这是sqlathanor的一行 return jsonify([user.to_dict() for user in users for k, v in user.to_dict().items() if k in ['username', 'name', 'surname', 'email']]

有没有办法使用SQLAthanor序列化只包含特定字段的SQLAlchemy模型?文档中没有提到它,所以我找到的唯一方法是手动过滤结果

这是sqlathanor的一行

return jsonify([user.to_dict() for user in users for k, v in user.to_dict().items() 
                                if k in ['username', 'name', 'surname', 'email']])
相当于这个用棉花糖的

return jsonify(SchemaUser(only=('username', 'name', 'surname', 'email')).dump(users, many=True))

请再说一遍,SQLAthanor中是否有一个内置的方法来执行此操作?

根据相关的:

在不调整实例配置的情况下更改序列化字段列表的唯一方法是手动将
的结果调整为\()
。您的代码片段是实现这一点的一种方法,尽管对于JSON和YAML,您还可以提供一个自定义的
serialize_函数
,该函数接受
dict
,处理它,并根据需要序列化为JSON或YAML:

import simplejson as json

def my_custom_serializer(value, **kwargs):
    filtered_dict = {}
    filtered_dict['username'] = value['username']
    # repeat pattern for other fields

    return json.dumps(filtered_dict)

json_result = user.to_json(serialize_function = my_custom_serializer)`
这两种方法实际上是相同的,但是
serialize_函数
方法为您提供了更大的灵活性,可以对序列化输出进行更复杂的调整,并且(我认为)更容易阅读/维护代码(尽管如果您所做的只是调整包含的字段,那么您的代码片段已经非常可读)

您还可以泛化
serialize_函数
。因此,如果您想给它一个要包含的字段列表,只需将它们作为关键字参数包含在
to_json()
中即可:

def my_custom_serializer(value, **kwargs):
    filter_fields = kwargs.pop(“filter_fields”, None)
    result = {}
    for field in filter_fields:
        result[field] = value.get(field, None)

    return json.dumps(result)

result = [x.to_json(serialize_funcion = my_custom_serializer,  filter_fields = ['username', 'name', 'surname', 'email']) for x in users)