Python 如何按与长生不老药的多对多关系计数排序?

Python 如何按与长生不老药的多对多关系计数排序?,python,orm,sqlalchemy,python-elixir,Python,Orm,Sqlalchemy,Python Elixir,使用长生不老药,有两个实体——选民和候选人——中间有多对多(选民可以为许多候选人投票,如果有必要的话)。希望获得按选民数量排序的候选人名单。有没有办法用这种长生不老药的声明来做到这一点 class Voter(Entity): votes = ManyToMany('Candidate') class Candidate(Entity): voters = ManyToOne('Voter') 我读过,但想用长生不老药做得更清楚。我希望,这是可能的。我发现在长生不老药中按多对

使用长生不老药,有两个实体——选民和候选人——中间有多对多(选民可以为许多候选人投票,如果有必要的话)。希望获得按选民数量排序的候选人名单。有没有办法用这种长生不老药的声明来做到这一点

class Voter(Entity):
    votes = ManyToMany('Candidate')

class Candidate(Entity):
    voters = ManyToOne('Voter')

我读过,但想用长生不老药做得更清楚。我希望,这是可能的。

我发现在长生不老药中按多对多关系排序的唯一方法是从关系中挤出第二个表,然后“像炼金术中一样”。大致如下:

secondr_table = Candidate._descriptor.find_relationship('voters').secondary_table
cands_by_rank = (
    session.query(
        Candidate.id,
        func.count(secondr_table.c.candidate_id).label('total')
    )
    .join(secondr_table)
    .group_by(Candidate)
    .order_by('total DESC')