From 8626f57db5b07f426339b98ee1e6e02e499f49d8 Mon Sep 17 00:00:00 2001 From: 00MSJ1122 <1253313142@qq.com> Date: Mon, 21 Sep 2026 09:39:28 +0800 Subject: [PATCH 1/6] text --- PythonProject/dao/student_dao.py | 49 ++++++++++++++++++++++++-- PythonProject/model/student_model.py | 8 ++--- PythonProject/schema/student_schema.py | 31 +++++++++++++++- 3 files changed, 80 insertions(+), 8 deletions(-) diff --git a/PythonProject/dao/student_dao.py b/PythonProject/dao/student_dao.py index b93a8ed..55d7dd5 100644 --- a/PythonProject/dao/student_dao.py +++ b/PythonProject/dao/student_dao.py @@ -1,6 +1,7 @@ from fastapi import HTTPException,Depends from util.database import get_db from model.student_model import Student_Model +from typing import List, Optional, Dict, Any def select_age(min_age,max_age,session=Depends(get_db)): try: @@ -17,9 +18,51 @@ def select_age(min_age,max_age,session=Depends(get_db)): except Exception: raise HTTPException(status_code=500,detail="查询异常") -def select_gender(gender,session=Depends(get_db)): - if gender is None and session is None: - return None +def delete_student_dao(stu_id,db): + try: + rows = db.query(Student_Model).filter(Student_Model.stu_id == stu_id).delete() + except: + db.rollback() + rows = 0 + else: + db.commit() + finally: + return rows +def update_student_dao(stu_id,update_data,db): + try: + rows = db.query( Student_Model ).filter( Student_Model.stu_id == stu_id ).update( update_data ) + except: + db.rollback() + return False + else: + db.commit() + return rows + +def get_student_dao(stu_id:Optional[int] + ,stu_name:Optional[str] + ,class_id:Optional[int] + ,db: Session + ,page: int + ,page_size: int + ) -> tuple[List[Dict[str, Any]], int]: + q = db.query(Student_Model) + if stu_id: + q = q.filter(Student_Model.stu_id == stu_id) + if stu_name: + q = q.filter(Student_Model.stu_name.like(f"%{stu_name}%")) + if class_id: + q= q.filter(Student_Model.class_id == class_id) + total = q.count() + r = q.offset((page - 1) * page_size).limit(page_size).all() + data = [] + for i in r: + data.append({'stu_id': i.stu_id + ,'stu_name': i.stu_name + ,'class_id': i.class_id + ,'create_date': i.create_date + ,'update_date': i.update_date + }) + return data, total diff --git a/PythonProject/model/student_model.py b/PythonProject/model/student_model.py index f631579..73dace8 100644 --- a/PythonProject/model/student_model.py +++ b/PythonProject/model/student_model.py @@ -8,10 +8,10 @@ class Student_Model(Base): , primary_key=True , autoincrement=True ,comment='学生编号') - # class_id=Column(Integer - # ,ForeignKey('wl_class.class_id') - # ,nullable=False - # ,comment='班级编号') + class_id=Column(Integer + ,ForeignKey('wl_class.class_id') + ,nullable=False + ,comment='班级编号') stu_name=Column(String(100),comment='学生姓名') age=Column(Integer,comment='年龄') gender=Column(String(50),comment='性别') diff --git a/PythonProject/schema/student_schema.py b/PythonProject/schema/student_schema.py index c950945..c4ca20d 100644 --- a/PythonProject/schema/student_schema.py +++ b/PythonProject/schema/student_schema.py @@ -1,4 +1,33 @@ -from pydantic import BaseModel,field_serializer +from datetime import date +from typing import Self +from pydantic import BaseModel, field_serializer, field_validator,model_validator + + +class StudentRequest(BaseModel): + class_id:int |None = None + stu_name:str |None = None + age:int |None = None + gender:str |None = None + native_place:str |None = None + birthday:date + school:str |None = None + major:str |None = None + degree:str |None = None + admission_date:date + graduation_date:date + @field_validator('age') + @classmethod + def check_age(cls, v): + if v is not None and v < 0: + raise ValueError('年龄不能为负数') + return v + + @model_validator(mode='after') + def check_admission_graduation(self) -> Self: + if self.admission_date and self.graduation_date: + if self.admission_date > self.graduation_date: + raise ValueError ('入学日期不能晚于毕业日期') + return self class StudentResponse(BaseModel): code:int = 200 From 093fe608fb0829d23641b8ccf952a8d4b4c9a466 Mon Sep 17 00:00:00 2001 From: test1 Date: Mon, 21 Sep 2026 11:32:27 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/schema/teacher_schema.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PythonProject/schema/teacher_schema.py b/PythonProject/schema/teacher_schema.py index 55963d9..f8accfa 100644 --- a/PythonProject/schema/teacher_schema.py +++ b/PythonProject/schema/teacher_schema.py @@ -17,6 +17,8 @@ class Teacher_ResponseModel(BaseModel): code:int=200 detail:str='OK!' teac_name:str + totals:int=0 + From 810d47a2cc96d724e8afec131d465c944b9afa97 Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 11:34:23 +0800 Subject: [PATCH 3/6] mrz --- PythonProject/schema/teacher_schema.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/PythonProject/schema/teacher_schema.py b/PythonProject/schema/teacher_schema.py index 221bd85..474634c 100644 --- a/PythonProject/schema/teacher_schema.py +++ b/PythonProject/schema/teacher_schema.py @@ -4,14 +4,13 @@ from pydantic.v1 import BaseModel from datetime import datetime class Teacher_RequestModel(BaseModel): - teac_id: int teac_name:str teac_gender:str teac_age:int teac_position:str - status=int - create_date:datetime - update_date:datetime + delete_status:int + + From 4dbe02d50cafb3761eecf15c44812eff62e62969 Mon Sep 17 00:00:00 2001 From: test1 Date: Mon, 21 Sep 2026 11:34:48 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E9=A9=AC=E7=9D=BF=E6=99=BA=E7=89=9B?= =?UTF-8?q?=E9=80=BC=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 需求文档.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/需求文档.md b/需求文档.md index 7b3b79e..84d2090 100644 --- a/需求文档.md +++ b/需求文档.md @@ -57,7 +57,7 @@ dao层(每一个功能就是一个函数,判断能否功能复用) 实现统计每个班级的学员总数以及男女生的总数的功能 **mrz 做成中** 实现根据成绩查询学员信息的功能 **xxx 做成中** 实现统计每次考试每个班级的平均分并排序的功能 **xxx 做成中** -实现统计薪资最高的前五名的学员信息 **xxx 做成中** +实现统计薪资最高的前五名的学员信息 **sgt 做成中** 实现查询每个学生的就业时长 **xxx 做成中** 实现统计每个班级的平均就业时长 **xxx 做成中** From b45d16ff8e7b380682932374beea3f897dea0b43 Mon Sep 17 00:00:00 2001 From: wolin_chenyulin001 <123@163.com> Date: Mon, 21 Sep 2026 11:41:54 +0800 Subject: [PATCH 5/6] =?UTF-8?q?cyl=E5=B7=B2=E5=BB=BA=E7=AB=8B=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/employment_api.py | 0 PythonProject/dao/employment_dao.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 PythonProject/api/employment_api.py create mode 100644 PythonProject/dao/employment_dao.py diff --git a/PythonProject/api/employment_api.py b/PythonProject/api/employment_api.py new file mode 100644 index 0000000..e69de29 diff --git a/PythonProject/dao/employment_dao.py b/PythonProject/dao/employment_dao.py new file mode 100644 index 0000000..e69de29 From 1837764dd26057eae017d5c39e464d954b06d794 Mon Sep 17 00:00:00 2001 From: 00MSJ1122 <1253313142@qq.com> Date: Mon, 21 Sep 2026 11:43:34 +0800 Subject: [PATCH 6/6] text --- PythonProject/api/student_api.py | 41 ++++++++++++++++++++++++++++---- PythonProject/dao/student_dao.py | 39 ++++++++++++++++++++---------- 需求文档.md | 8 +++---- 3 files changed, 68 insertions(+), 20 deletions(-) diff --git a/PythonProject/api/student_api.py b/PythonProject/api/student_api.py index b71aafc..db947bf 100644 --- a/PythonProject/api/student_api.py +++ b/PythonProject/api/student_api.py @@ -1,11 +1,44 @@ -from fastapi import APIRouter -from dao.student_dao import select_age +from fastapi import APIRouter,Depends,HTTPException from schema.student_schema import StudentResponse +from dao.student_dao import delete_student_dao,add_student_dao,update_student_dao,get_student_dao,select_age +from schema.student_schema import StudentRequest,StudentResponse +from model.student_model import Student_Model +from util.database import get_db -studentapi = APIRouter() -@studentapi.get("/age",response_model=StudentResponse,tags=['统计分析模块'],description='根据年龄查询学生信息') +StudentAPI = APIRouter() + +@StudentAPI.get("/age",response_model=StudentResponse,tags=['统计分析模块'],description='根据年龄查询学生信息') def get_students(min_age:int|None=None,max_age:int|None=None): l = select_age(min_age,max_age) return [i for i in l] +@StudentAPI.get('',description='查询学生信息') +def get_students(stu_id:int|None=None + ,stu_name:str|None=None + ,class_id:int|None=None + ,db=Depends(get_db) + ,page:int=1 + ,page_size:int=10): + r=get_student_dao(stu_id,stu_name,class_id,db,page,page_size) + if r: + return r + raise HTTPException(status_code=404,detail='学生不存在') + +@StudentAPI.put('/{stu_id}') +def update_orders(s:StudentRequest,stu_id:int,db=Depends(get_db)): + d = s.model_dump(exclude_unset=True) + r = update_student_dao( stu_id=stu_id,update_data=d,db=db ) + if not r: + raise HTTPException(status_code=500, detail='没有更新!') + return {'code':200,'totals':r,'detail':'更新成功'} + +@StudentAPI.delete('/{stu_id}') +def del_student(stu_id:int,db=Depends(get_db)): + rows=delete_student_dao( stu_id=stu_id,db=db ) + if not rows: + raise HTTPException(status_code=500,detail='没有删除') + return {'code':200,'totals':rows,'detail':'删除成功'} + + + diff --git a/PythonProject/dao/student_dao.py b/PythonProject/dao/student_dao.py index 55d7dd5..9806925 100644 --- a/PythonProject/dao/student_dao.py +++ b/PythonProject/dao/student_dao.py @@ -9,29 +9,44 @@ def select_age(min_age,max_age,session=Depends(get_db)): raise HTTPException(status_code=400, detail="请至少传入一个参数") session = session.query(Student_Model) if min_age is not None: - session = session.filter(Student_Model.age >= min_age) + session = session.filter(Student_Model.age >= min_age,Student_Model.delete_status == 0) if max_age is not None: - session = session.filter(Student_Model.age <= max_age) + session = session.filter(Student_Model.age <= max_age,Student_Model.delete_status == 0) return session.all() except HTTPException: raise except Exception: raise HTTPException(status_code=500,detail="查询异常") -def delete_student_dao(stu_id,db): +def add_student_dao(o,db=Depends(get_db)): try: - rows = db.query(Student_Model).filter(Student_Model.stu_id == stu_id).delete() + r = db.query(Student_Model).filter(Student_Model.stu_id == o['stu_id'],Student_Model.delete_status == 0).all() + if not r: + o1 = Student_Model( **o) + db.add(o1) + else: + raise ValueError + except: + db.rollback() + return False + else: + db.commit() + return True + +def delete_student_dao(stu_id,db=Depends(get_db)): + try: + rows = db.query(Student_Model).filter(Student_Model.stu_id == stu_id,Student_Model.delete_status == 0).delete() + Student_Model.delete_status = 1 + db.commit() except: db.rollback() rows = 0 - else: - db.commit() finally: return rows -def update_student_dao(stu_id,update_data,db): +def update_student_dao(stu_id,update_data,db=Depends(get_db)): try: - rows = db.query( Student_Model ).filter( Student_Model.stu_id == stu_id ).update( update_data ) + rows = db.query( Student_Model ).filter( Student_Model.stu_id == stu_id,Student_Model.delete_status == 0).update( update_data ) except: db.rollback() return False @@ -42,17 +57,17 @@ def update_student_dao(stu_id,update_data,db): def get_student_dao(stu_id:Optional[int] ,stu_name:Optional[str] ,class_id:Optional[int] - ,db: Session ,page: int ,page_size: int + ,db=Depends(get_db) ) -> tuple[List[Dict[str, Any]], int]: q = db.query(Student_Model) if stu_id: - q = q.filter(Student_Model.stu_id == stu_id) + q = q.filter(Student_Model.stu_id == stu_id,Student_Model.delete_status == 0) if stu_name: - q = q.filter(Student_Model.stu_name.like(f"%{stu_name}%")) + q = q.filter(Student_Model.stu_name.like(f"%{stu_name}%"),Student_Model.delete_status == 0) if class_id: - q= q.filter(Student_Model.class_id == class_id) + q= q.filter(Student_Model.class_id == class_id,Student_Model.delete_status == 0) total = q.count() r = q.offset((page - 1) * page_size).limit(page_size).all() data = [] diff --git a/需求文档.md b/需求文档.md index 7b3b79e..c8bef6f 100644 --- a/需求文档.md +++ b/需求文档.md @@ -23,10 +23,10 @@ dao层(每一个功能就是一个函数,判断能否功能复用) 通用模块 学生模块 -实现增加学生的功能 **xxx 做成中** -实现查询学生的功能:需要能进行多条件查询 **xxx 做成中** -实现更新学生信息的功能 **xxx 做成中** -实现删除学生信息的功能 (更新删除状态这个列,即软删除)**xxx 做成中** +实现增加学生的功能 **msj 做成中** +实现查询学生的功能:需要能进行多条件查询 **msj 做成中** +实现更新学生信息的功能 **msj 做成中** +实现删除学生信息的功能 (更新删除状态这个列,即软删除)**msj 做成中** 成绩模块 实现增加学生成绩的功能 **hzl 做成中**