I’m using Flask-SQLAlchemy with PostgreSQL. My CourseModel and ReviewModel manage courses and reviews. I want to list courses with 2+ reviews, but the query fails in production.
class CourseModel(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120))
details = db.Column(db.Text)
reviews = db.relationship('ReviewModel', backref='course', lazy='dynamic')
class ReviewModel(db.Model):
__table_args__ = (db.UniqueConstraint('course_id', 'user_id'), {})
id = db.Column(db.Integer, primary_key=True)
submitted_on = db.Column(db.DateTime)
remark = db.Column(db.Text)
score = db.Column(db.SmallInteger)
course_id = db.Column(db.Integer, db.ForeignKey('course_model.id'))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
tops = db.session.query(ReviewModel, func.count(ReviewModel.course_id))\
.group_by(ReviewModel.course_id)\
.having(func.count(ReviewModel.course_id) >= 2)\
.order_by(func.count(ReviewModel.course_id).desc()).all()