GROUP3

来源:5-15 使用ORM查询数据-分组和去重

ITMOCC

2021-08-23

请问老师,您最后一个练习里打印的好像只有语文成绩?如何将及格学生的所有成绩都打印出来呢?

写回答

1回答

NavCat

2021-08-25

这里是查学生信息,按照学生ID分组后取的第一条,所以只有一条成绩信息。

如果要查所有的成绩,可以在代码中再查一次,如下:

stmt = select(StudentGrade,
              func.count().label('course_count')).where(StudentGrade.score >= 60)\
        .group_by(StudentGrade.student_id)\
        .having(func.count() == 3)
queryset = self.session.execute(stmt).mappings().all()
for item in queryset:
    print(item)
    # 循环各科成绩
    for grade in item.StudentGrade.student.grade_list:
        print(grade)

或者是结合SQL中的GROUP_CONCAT函数将分数这一列拼接起来:如下:

stmt = select(StudentGrade,
              func.count().label('course_count'),
              func.group_concat(StudentGrade.score).label('course_all')
              )\
        .where(StudentGrade.score >= 60)\
        .group_by(StudentGrade.student_id)\
        .having(func.count() == 3)
queryset = self.session.execute(stmt).mappings().all()
for item in queryset:
    print(item)

//img.mukewang.com/szimg/612527eb099236b416930948.jpg

0
6
NavCat
回复
ITMOCC
grade_list是学生模型中对成绩表模型的引用,你可以回看下5-7小节,那里有讲外键引用
2021-08-27
共6条回复

Python操作三大主流数据库 实战网易新闻客户端

零基础快速进阶,专为只懂Python语法的同学设计

432 学习 · 116 问题

查看课程