python - 使用行值函数的flask-sqlalchemy查询
问题描述
我有两个表,学生和结果,具有一对一的关系。Student 表最终将包含完整的学生档案信息,Result 表是每个学生的数学和英语测试结果。
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True)
student_name = db.Column(db.String(80), nullable=False)
result_id = db.Column(db.Integer, db.ForeignKey('result.id'), nullable=False)
result = db.relationship('Result', backref=db.backref('students', lazy=True))
class Result(db.Model):
id = db.Column(db.Integer, primary_key=True)
math_score = db.Column(db.Integer)
english_score = db.Column(db.Integer)
我想选择按两次考试成绩之和排序的前 10 名得分最高的学生。所以类似于:
Student.query.order_by(sum_of(maths_score, english_score)).limit(10).all()
我想将查询结果显示为三列,学生姓名,数学成绩,英语成绩,从最高到最低的总和。我不需要从查询中输出测试分数的总和。我试图避免将测试分数的总和存储在结果表中。
我找不到任何关于如何基于行值函数执行这样的 flask-sqlalchemy 查询的示例。
任何人都可以帮助阐明这一点。
解决方案
您可以使用这样的查询:
topten = db.session.query(Student.student_name, (Result.english_score +
Result.math_score).label("overall")).join(Result).order_by(desc("overall")).limit(10)
这将创建如下输出: [('Student 2', 12), ('Student 13', 12), ('Student 18', 12), ('Student 19', 10), ('Student 3', 9 ), ('学生 11', 9), ('学生 16', 9), ('学生 20', 9), ('学生 21', 9), ('学生 6', 8)]
如果您创建了 10 岁以上的随机结果学生(范围从 1 到 6)
推荐阅读
- tensorflow - Tensorflow 2 在自定义编写层中出错,在 Tensorflow 1 中运行良好(断言 t.graph == cond_graph; AssertionError)
- ruby-on-rails - RoR 控制器 ensure_user_profile 实现
- html - 为什么我的横幅视频无法在 chrome 中自动播放?
- javascript - 将 HTML 表单存储到变量
- asp.net-core - 如何从 ASP Net Core 通过 SMB 协议访问文件夹
- c# - 为什么提交后表单字段条目消失?
- sql - 使用 SQL Server 查找时间戳间隔中的统计异常值
- ios13 - RxSwift:停止 compactMap 以继续执行
- python - python tkinter 按钮参数
- amazon-web-services - 我的应用程序如何发现 AWS App Mesh(具有动态端口的 ECS/Fargate)上的 *local* envoy sidecar 代理的地址/端口?