python - SQLAlchemy 按值排序时获得位置?
问题描述
我有一个存储一些电影信息和分数的表。
我希望能够知道一部电影在按该分数排序后的位置(即“闪灵”的分数排在第 10 位),但它显然不一定在数据库的第十位或 id 为 10。
是否有可能通过查询或以某种方式将其保留为表中的值来获得类似的东西?
谢谢!
该表如下所示:
class MoviePersonScores(db.Model):
movie_id = db.Column(db.Integer, db.ForeignKey('movie.id'), primary_key=True)
person_id = db.Column(db.Integer, db.ForeignKey('person.id'), primary_key=True)
score = db.Column(db.Integer)
person = relationship("Person", back_populates="movies")
movie = relationship("Movie", back_populates="people")
解决方案
此查询可以分为两个不同的步骤:
- 获取表中每条记录的排名
- 获取特定记录的排名
因为rank
是相对于整个表集合的,所以您别无选择,只能计算每条记录的排名。但是, 的魔力sqlalchemy
允许您利用数据库来执行这些计算。
其次,您的应用程序不需要每个对象的等级。因此,我们将链接查询以仅提供我们想要的查询。
更sqlalchemy
神奇的是,我们可以链接这些查询以在单个数据库事务中执行:
from sqlalchemy import func
# Assuming you have a session established somewhere
# though `MoviePersonScores.query` may work just the same
query = session.query(
MoviePersonScores,
func.rank()\
.over(
order_by=MoviePersonScores.score
)\
.label('rank')
)
# now filter
query = query.filter_by(movie_id=movie_id)
# now execute:
my_movie = query.all()
# Or, just get the first value
my_movie = query.first()
推荐阅读
- email - 我有 SMTP 困惑
- react-native - 我在构建项目时收到此错误
- excel - 我如何将条件格式应用于单元格的值而不是该值的外观?
- spring - 石英调度器2.3.3版本中executeInternal和execute的区别
- node.js - 如何使用 nodejs、express、mongodb 存储图像并做出反应
- node.js - 重定向页面时如何将jwt存储在cookie中并将其传递给身份验证功能?
- amazon-web-services - MeterUsage 和 BatchMeterUsage AWS Marketplace Metering Service API 有什么区别?
- python - 由于框架,我找不到 Element
- android - 如何每个会话仅显示一次弹出窗口?
- mysql - 无法添加外键约束 - 无法解析接近错误的表名