Python 在多对多关系上按计数排序,而不返回带有计数的元组

Python 在多对多关系上按计数排序,而不返回带有计数的元组,python,sqlalchemy,Python,Sqlalchemy,使用以下简化的类和表 tags = db.Table( "tags", db.Column("tag_id", db.Integer, db.ForeignKey("tag.id")), db.Column("post_version_id", db.Integer, db.ForeignKey("post_version.id"))

使用以下简化的类和表

tags = db.Table(
        "tags",
        db.Column("tag_id", db.Integer, db.ForeignKey("tag.id")),
        db.Column("post_version_id", db.Integer, db.ForeignKey("post_version.id"))
        )

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)

class PostVersion(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    current = db.Column(db.Boolean, default=False, index=True)
我正在尝试调用所有通过
标记连接且具有值
current=True
PostVersion
编号排序的
标记

我开发了以下查询:

db.session.query(Tag,
        db.func.count(PostVersion.id).label("total")
        ).outerjoin(tags
        ).outerjoin(PostVersion,    
                and_(PostVersion.id==tags.c.post_version_id,
                PostVersion.current==True)
        ).group(Tag).order_by("total DESC").all()
这将产生以下(正确)结果:

[(,136),
(, 136),
(, 3),
(, 1),
(, 1),
(, 0),
(, 0),
(, 0),
(, 0),
(, 0),
(, 0),
(, 0),
(, 0),
(, 0),
(, 0),
(, 0)]
除了为了抑制基于元组的输出(包括
db.func.count(PostVersion.id).label(“total”)
的结果),我必须对结果进行额外的修改,我完全不确定如何重写查询以抑制这一结果


我如何制定查询,以便按照查询返回的顺序返回对象?解决方案很简单:将count表达式移动到orderby子句:

db.session.query(Tag).\
    outerjoin(tags).\
    outerjoin(PostVersion,
              and_(PostVersion.id==tags.c.post_version_id,
                   PostVersion.current==True)).\
    group_by(Tag.id).\
    order_by(db.func.count(PostVersion.id).desc()).\
    all()

通过查看我的ipython历史记录,似乎我确实尝试过这样做,但我犯了一个致命的错误,忘记添加
desc()
,这导致我认为顺序已经消失了(
asc()
几乎与我的数据中按id排序相同!)。谢谢你,Ilja。
db.session.query(Tag).\
    outerjoin(tags).\
    outerjoin(PostVersion,
              and_(PostVersion.id==tags.c.post_version_id,
                   PostVersion.current==True)).\
    group_by(Tag.id).\
    order_by(db.func.count(PostVersion.id).desc()).\
    all()