python - 使用行值函数进行 Flask-sqlalchemy 查询

标签 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)

这将创建如下输出: [('学生 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/

相关文章:

python - 如何验证变量是否在两个指定数字之间?

python - 如何 json 转储包含外来字符的字典

python - 使用 Flask 和 SQLAlchemy 的显式主-主数据库设置,希望使用 Flask-SQLAlchemy

Flask-SQLAlchemy 查询结果数

python - 在 Flask-admin 中添加过滤器并在同一模型中搜索具有多个外键的模型

flask-sqlalchemy - Slugify 在过滤器 sqlalchemy 中

Python Flask Sqlalchemy Subst 查询

python - 如何在新行字符上拆分 Python 字符串

python - 导入库无法与 exec 函数一起使用?

python - 使用 win32com.client 计算 Excel 文件中的工作表数