Search code examples
pythonflasksqlalchemyflask-sqlalchemymarshmallow

serialize values of aggregate results from sqlalchemy using marshmallow


I am performing a count() and group_by() operation on a table as follows:

db.session.query(func.count(Tag.name), Tag.name).group_by(Tag.name).limit(limit)

and serialize it using marshmallow:

class TagSchema(ma.ModelSchema):
    class Meta:
        model = Tag
    name = fields.String(validate=validate.Length(min=1))

which gives me result as :

[{"name" : "asdf"},{"name":"qwer"}]

but I don't see the count value, how should I update the schema to get count value in the output.


Solution

  • first label the count field as :

    db.session.query(func.count(Tag.name).label('count'), Tag.name).group_by(Tag.name).limit(limit)
    

    and then add a new shema as:

    class TagCountSchema(ma.ModelSchema):
        name = fields.String()
        count = fields.Int(dump_only=True)