采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
请问老师,您最后一个练习里打印的好像只有语文成绩?如何将及格学生的所有成绩都打印出来呢?
这里是查学生信息,按照学生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)
这样打印是因为StudentGrade的__repr__返回 '{}-{}:{}'.format(self.student.stu_name,self.course.course_name,self.score),这里self.course.course_name,self.socre默认的就是语文吗?有没有可能实现只查StudentGrade就实现沈小姐-语文:,沈小姐-数学: ,沈小姐-英语: 这种输出?
你看给你的第一种解决方案
哦哦。我还是不太理解为什么grade_list里会有各科的成绩呢?而且还都是按照__repr__打印出来的。
零基础快速进阶,专为只懂Python语法的同学设计
1.1k 11
811 9
685 7
746 7
777 6