Python 按多个子属性对父模型进行排序SQLAlchemy

Python 按多个子属性对父模型进行排序SQLAlchemy,python,postgresql,flask,sqlalchemy,flask-sqlalchemy,Python,Postgresql,Flask,Sqlalchemy,Flask Sqlalchemy,我正在使用Python/Flask/SQLAlchemy。我有一个班级竞赛,我想按等级排序,这是(棘手的)它的子(边)属性的总和。评级公式为 leftside.score + len(leftside.votes) + rightside.score + len(leftside.votes) 型号: class Contest(db.Model): leftside_id = db.Column(db.Text, db.ForeignKey('sides.id')) righ

我正在使用Python/Flask/SQLAlchemy。我有一个班级竞赛,我想按等级排序,这是(棘手的)它的子(边)属性的总和。评级公式为

leftside.score + len(leftside.votes) + rightside.score + len(leftside.votes)
型号:

class Contest(db.Model):
    leftside_id = db.Column(db.Text, db.ForeignKey('sides.id'))
    rightside_id = db.Column(db.Text, db.ForeignKey('sides.id'))

    leftside = db.relationship("Side", foreign_keys=[leftside_id])
    rightside = db.relationship("Side", foreign_keys=[rightside_id])

    rating = #??? leftside.score + len(leftside.votes) + rightside.score + len(leftside.votes)


class Side(db.Model):
    score = db.Column(db.Integer, default=0)
    votes = db.relationship('SideVote')

class SideVote(db.Model):
    side_id = db.Column(db.Text, db.ForeignKey('sides.id'))
    side = db.relationship('Side')
我可以编写一个原始SQL,但它将返回简单的列表,但我需要SQLAlchemy查询

SELECT *, (
    score
        + (SELECT COUNT(*) FROM sidevotes WHERE side_id = contests.leftside_id or side_id = contests.rightside_id)
    ) as Field
FROM contests, sides
WHERE contests.leftside_id = sides.id or contests.rightside_id = sides.id
ORDER BY Field DESC
因此,我需要再次按照上面的公式对竞赛进行排序,这里我看到了两种可能的解决方案:

  • 创建一些混合属性/列属性

  • 或者执行SQL并将其映射到SQLAlchemy查询,以便使用此结果

可能相关