我有两个表,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)
这将创建如下输出:
[('学生 2', 12), ('学生 13', 12), ('学生 18', 12), ('学生 19', 10), ('学生 3', 9), ( '11号学生', 9), ('16号学生', 9), ('20号学生', 9), ('21号学生', 9), ('6号学生', 8)]
.
如果您创建了 10 岁以上的学生并具有随机结果(范围从 1 到 6)。
关于python - 使用行值函数进行 Flask-sqlalchemy 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59423244/