SQLAlchemy的排序依赖于多对多关系

|| 这是我当前模型的简化示例(我正在使用Flask SQLAlchemy扩展名):
like = db.Table(
    \'like\',
    db.Column(\'uid\', db.Integer, db.ForeignKey(\'users.id\')),
    db.Column(\'pid\', db.Integer, db.ForeignKey(\'posts.id\'))
)

class User(db.Model):
    __tablename__ = \'users\'

    id = db.Column(db.Integer, primary_key = True)
    username = db.Column(db.String(20))

class Post(db.Model):
    __tablename__ = \'posts\'

    id = db.Column(db.Integer, primary_key = True)
    title = db.Column(db.String(255))

    likes = db.relationship(
        \'User\',
        secondary = like,
        backref = db.backref(\'likes\', lazy = \'dynamic\'),
        lazy = \'dynamic\'
    )
我正在尝试按喜欢的数量订购
Post
。 这基本上是我要尝试发出的查询:
SELECT p.*, COUNT(l.`pid`) as `likes`
FROM `posts` as p
LEFT JOIN `like` as l
    ON p.`id` = l.`pid`
GROUP BY p.`id`
ORDER BY `likes` DESC
我只是无法在SQLAlchemy方面进行任何工作。 感谢您提供任何帮助。     
已邀请:
我没有使用SQLAlchemy,所以我想尝试一下。我没有尝试使用您的模型,我只是写了一些新模型(尽管足够类似):
likes = db.Table(\'likes\',
    db.Column(\'user_id\', db.Integer, db.ForeignKey(\'user.id\')),
    db.Column(\'post_id\', db.Integer, db.ForeignKey(\'post.id\'))
)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20))

    def __repr__(self):
        return \"<User(\'%s\')>\" % self.username

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255))

    likes = db.relationship(\'User\', secondary = likes,
        backref = db.backref(\'posts\', lazy=\'dynamic\'))

    def __repr__(self):
        return \"<Post(\'%s\')>\" % self.title
您想加入
likes
表,使用
func.count
计数点赞,s6ѭ
Post
,然后使用
order_by
db.session.query(Post, func.count(likes.c.user_id).label(\'total\')).join(likes).group_by(Post).order_by(\'total DESC\')
我发现ORM教程和SQLAlchemy文档的其余部分非常有用。     

要回复问题请先登录注册