Я не очень много использовал 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
для подсчета лайков, group_by
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 очень полезными.