Python SQLAlchemy是否在查询结果中包含@property?
所以我有一个电影和一个类别之间的关系,一个分数和对他们投下的票数,我想要一个属性,检查分数是否有足够的票数显示在网站上。所以我创建了一个@property(也尝试了hybrid_属性),它只返回bool,类如下: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
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)
...