diff --git a/StatCalc/api/statcalc_api.py b/StatCalc/api/statcalc_api.py index 69e4b0b..d34051e 100644 --- a/StatCalc/api/statcalc_api.py +++ b/StatCalc/api/statcalc_api.py @@ -22,9 +22,10 @@ def get_students(db=Depends(get_db)): ,summary='人数统计' ,description=f'统计每个班级的人数以及男生女生的人数。' ) -def get_students(db=Depends(get_db)): - s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 - result = get_student_dao( s=s_dict , db=db ) +def get_students(g:get_student_dao = Depends() + ,db=Depends(get_db) + ): + result = get_class_count( g=g , db=db ) if result: return result raise HTTPException(status_code=404, detail="没有找到符合条件的学生") @@ -33,11 +34,8 @@ def get_students(db=Depends(get_db)): ,summary='80分以上成绩学生信息查询' ,description=f'查询每次考试成绩都在80分以上的学生的编号,姓名和成绩。' ) -def get_students( stu:StudentsQuery = Depends() - , db=Depends(get_db) - ): - s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 - result = get_student_dao( s=s_dict , db=db ) +def get_students(db=Depends(get_db)): + result = get_student_dao( db=db ) if result: return result raise HTTPException(status_code=404, detail="没有找到符合条件的学生") diff --git a/StatCalc/dao/statcalc_dao.py b/StatCalc/dao/statcalc_dao.py index 0f9f382..a53deb6 100644 --- a/StatCalc/dao/statcalc_dao.py +++ b/StatCalc/dao/statcalc_dao.py @@ -1,5 +1,10 @@ +from pygments.lexers import sql +from sentry_sdk.integrations import sqlalchemy + from StatCalc.schema.statcalc_request import * from fastapi import HTTPException +from sqlalchemy import * + from students.model.students_model import Students @@ -7,13 +12,35 @@ def get_age_30(db): q = db.query(Students).filter(Students.age>=30).all() return q + from class_management.model.class_management_model import ClassInfo -def get_class_count(db): - q = (db.query(ClassInfo.id) - .join(Students,Students.class_id==ClassInfo.id) - .group_by(ClassInfo.id,Students.sex,) - .all()) - m - f - return q \ No newline at end of file +def get_class_count(g , db): + if g == "班级人数": + q = (db.query(ClassInfo.id,ClassInfo.name,func.count(ClassInfo.id) ) + .join(Students,Students.class_id==ClassInfo.id) + .group_by(ClassInfo.id,ClassInfo.name,Students.sex) + .all()) + elif g == "男女人数": + q = (db.query(Students.sex,func.count(ClassInfo.id) ) + .join(Students,Students.class_id==ClassInfo.id) + .group_by(Students.sex) + .all()) + elif g == "班级中男女人数": + q = (db.query(ClassInfo.id,ClassInfo.name,Students.sex,func.count(ClassInfo.id) ) + .join(Students,Students.class_id==ClassInfo.id) + .group_by(ClassInfo.id,ClassInfo.name,Students.sex) + .all()) + else: + return False + return q + + +from scores.model.score_model import Score + +def get_score_80(db): + q = db.query(Score).filter(Score.score>=80).all() + return q + + + diff --git a/StatCalc/schema/statcalc_request.py b/StatCalc/schema/statcalc_request.py index 660ffde..c1c4c7b 100644 --- a/StatCalc/schema/statcalc_request.py +++ b/StatCalc/schema/statcalc_request.py @@ -4,6 +4,9 @@ from pydantic import BaseModel , Field , field_validator from datetime import datetime import enum - +class get_student_dao(enum.Enum): + get_class = "班级人数" + get_sex = "男女人数" + get_class_sex = "班级中男女人数"