在棉花糖-sqlalchemy中序列化子级

时间:2019-03-17 02:38:44

标签: python sqlalchemy marshmallow

棉花糖通常会序列化嵌套子级(假定已定义嵌套模式)。例如:

{
    'id': 2,
    'messages' : [
        {
            'id': 1,
            'message': 'foo'
        },
        {
            'id': 2,
            'message': 'bar'
        }
      ]
}

但是,棉花糖-sqlalchemy导致子代仅由其主键表示。例如:

{
    'id': 2,
    'messages' : [
        1,
        2
    ]
}

如何获取棉花糖-sqlalchemy来序列化子对象。最好,我应该能够指定深度。例如:序列化为4层深度,然后使用uid行为。

理想情况下,这应该可以通过schema.load()进行配置,因为它应该根据序列化的开始位置是动态的。换句话说,将其耦合到架构本身没有任何意义。但是,如果那是唯一的方法,那么我也很好奇听到这样的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以使用嵌套字段来执行此操作。

假设您有一个如下所示的架构:

class MessageSchema(Schema):
    msg_id = fields.Integer()
    message = fields.String()
    something = fields.String()

class ListSchema(Schema):
    list_id = fields.Integer()
    messages = fields.Nested(MessageSchema, only=['msg_id', 'message'])

要仅包含某些字段,请在调用only时使用Nested参数(有关用法,请参见上面的示例,其中序列化中仅包含msg_idmessage字段输出)。

Marshmallow docs有一个更详细的完整示例: