Python SQLAlchemy是否在查询结果中包含@property?

Python SQLAlchemy是否在查询结果中包含@property?,python,sqlalchemy,Python,Sqlalchemy,所以我有一个电影和一个类别之间的关系,一个分数和对他们投下的票数,我想要一个属性,检查分数是否有足够的票数显示在网站上。所以我创建了一个@property(也尝试了hybrid_属性),它只返回bool,类如下: class MovieCategoryScores(db.Model): movie_id = db.Column(db.Integer, db.ForeignKey('movie.id'), primary_key=True) category_id = db.Col

所以我有一个电影和一个类别之间的关系,一个分数和对他们投下的票数,我想要一个属性,检查分数是否有足够的票数显示在网站上。所以我创建了一个@property(也尝试了hybrid_属性),它只返回bool,类如下:

class MovieCategoryScores(db.Model):
    movie_id = db.Column(db.Integer, db.ForeignKey('movie.id'), primary_key=True)
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'), primary_key=True)
    score = db.Column(db.Integer)
    votes = db.Column(db.Integer)
    category = relationship("Category", back_populates="movies")
    movie = relationship("Movie", back_populates="categories")

    @hybrid_property
    def enough_votes(self):
        return self.votes >= 10
然后我执行这个查询,得到一个等级,我猜大部分与此无关:

def get_category_score(movie_id, category_id):
    query = db.session.query(
    MovieCategoryScores,
    func.rank()\
        .over(
            order_by=MovieCategoryScores.score.desc(),
            partition_by=MovieCategoryScores.category_id,
        )\
        .label('rank')
    )
    # now filter
    query = query.filter(MovieCategoryScores.category_id == category_id)
    query = query.order_by(MovieCategoryScores.category_id, 'rank')
    all_movies = query.subquery()
    new_query = db.session.query(all_movies).filter(all_movies.c.movie_id == movie_id)
    my_movie = new_query.first()
    return my_movie

但是,这只返回
(550,18853.4214743594645,13,1)
,即电影id、人物id、分数、投票,然后排名。所以我想把“neoung_投票”中的布尔值也包括在内,但我一直不知道如何解决这个问题。

有多种方法可以解决这个问题:

  • 添加
    关联。在第一个查询中有足够的\u投票
  • .filter(Association.ough_vots)
    添加到查询中(将只生成具有足够_vots的行)
  • 如果您总是希望在查询中返回足够的投票,请使用
    列属性
    而不是
    混合属性
  • 来自sqlalchemy.orm导入列\u属性
    类别MovieCategoryScores(数据库模型):
    ...
    足够的票数=列属性(票数>=10)
    ...