【问题标题】:flask-sqlalchemy query using function of row values使用行值函数的flask-sqlalchemy查询
【发布时间】:2020-04-12 20:22:32
【问题描述】:

我有两个表,Student 和 Result,具有一对一的关系。 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 查询。

谁能帮忙解释一下。

【问题讨论】:

标签: python flask-sqlalchemy


【解决方案1】:

您可以使用这样的查询:

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)的学生

【讨论】:

  • 谢谢 Andi - 这是一段优雅的代码,非常适合我的需要。非常感谢。
猜你喜欢
  • 2014-10-09
  • 2019-04-23
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
相关资源
最近更新 更多