From 5881afd5cca6436bdfbde18e5c277d2438c80df7 Mon Sep 17 00:00:00 2001 From: cyf <15271199537@163.com> Date: Tue, 22 Sep 2026 19:33:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86num=E7=9A=84?= =?UTF-8?q?=E5=94=AF=E4=B8=80=E9=94=AE=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=BA=86?= =?UTF-8?q?dao=E5=92=8Capi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- class_management/api/class_management_api.py | 73 +++++++------- class_management/dao/class_management_dao.py | 98 ++++++++----------- class_management/database.py | 23 +++-- class_management/main.py | 2 +- .../model/class_management_model.py | 15 +-- .../schema/class_management_request.py | 7 +- 6 files changed, 98 insertions(+), 120 deletions(-) diff --git a/class_management/api/class_management_api.py b/class_management/api/class_management_api.py index 3323c8f..c057176 100644 --- a/class_management/api/class_management_api.py +++ b/class_management/api/class_management_api.py @@ -6,24 +6,52 @@ from class_management.schema.class_management_request import ClassCreate, ClassR class_api = APIRouter(prefix='/classes',tags=['班级管理模块']) - +#新增接口 @class_api.post("",summary='新增班级') def add_class(cla:ClassCreate,db=Depends(get_db)): c_dict = cla.model_dump() - r = add_class_dao(c=c_dict,db=db) - if not r: - raise HTTPException(status_code=500,detail='服务器繁忙,请稍后添加!') - return ClassResponse(totals=1,data=c_dict) + res = add_class_dao(c=c_dict,db=db) + if not res: + raise HTTPException(status_code=400,detail='新增失败,班级已存在') + return ClassResponse(detail='新增成功',totals=1,data=c_dict) -@class_api.get('/{id}',summary='根据id查询班级') -def get_one_class(id:int,db=Depends(get_db)): - res = get_class_dao(c={'id':id},db=db) +#更新接口 +@class_api.put("/{class_id}",summary='修改班级信息') +def update_class(class_id:int + ,update_info:ClassUpdate + ,db=Depends(get_db) + ): + update_dict=update_info.model_dump(exclude_unset=True) + if not update_dict: + raise HTTPException(status_code=400, detail="没有传入要修改的字段") + row_count = update_class_dao(cid=class_id, update_data=update_dict, db=db) + if not row_count : + raise HTTPException(status_code=404, detail="班级不存在,修改失败") + return ClassResponse(detail="修改成功", data={"id": class_id}) + + +#删除接口 +@class_api.delete('/{class_id}',summary='逻辑删除班级') +def remove_class(class_id:int,db=Depends(get_db)): + del_rows = delete_class_dao(cid = class_id,db=db) + if not del_rows: + raise HTTPException(status_code=404, detail="班级不存在,删除失败") + return ClassResponse(detail='删除成功',data={'id':class_id}) + + + +#单条查询接口 +@class_api.get('/{class_id}',summary='根据id查询班级') +def get_one_class(class_id:int,db=Depends(get_db)): + res = get_class_dao(c={'id':class_id},db=db) if not res: raise HTTPException(status_code=404, detail="该班级不存在或已删除") - return ClassResponse(total=1,data=res[0]) + return ClassResponse(totals=1,data=res[0]) -@class_api.get('',summary='多字段查询班级') + +#分类查询 +@class_api.get('',summary='多字段分页查询班级') def get_some_classes( num:str|None = Query(None,description='班级编号') ,name:str|None = Query(None,description='班级名称') ,head_teacher_id:int|None = Query(None,description='班主任') @@ -32,10 +60,9 @@ def get_some_classes( num:str|None = Query(None,description='班级编号') ,class_start_time:date|None = Query(None, description="开班日期,格式YYYY‑MM‑DD") ,class_end_time: date|None = Query(None, description="结课日期,格式YYYY‑MM‑DD") ,page:int = Query(1,ge=1,description='页码,从1开始') - ,page_size:int = Query(5,ge=1,le=50,description='每页信息条数') + ,page_size:int = Query(5,ge=1,le=20,description='每页信息条数') ,db=Depends(get_db) ): - c_dict = { 'num': num, 'name': name, @@ -51,7 +78,7 @@ def get_some_classes( num:str|None = Query(None,description='班级编号') res = get_class_dao(c=c_dict,db=db) total = len(res) - #内存分页 + #分页 start_index = (page-1)*page_size page_data = res[start_index:start_index + page_size] @@ -60,23 +87,3 @@ def get_some_classes( num:str|None = Query(None,description='班级编号') -@class_api.put("/{class_id}",summary='修改班级信息') -def update_class(class_id:int - ,update_info:ClassUpdate - ,db=Depends(get_db) - ): - update_dict=update_info.model_dump(exclude_unset=True) - if not update_dict: - raise HTTPException(status_code=400, detail="没有传入要修改的字段") - row_count = update_class_dao(cid=class_id, update_data=update_dict, db=db) - if row_count <= 0: - raise HTTPException(status_code=404, detail="班级不存在,修改失败") - return ClassResponse(detail="修改成功", data={"class_id": id}) - - -@class_api.delete('/{id}',summary='逻辑删除班级') -def remove_class(id:int,db=Depends(get_db)): - del_rows = delete_class_dao(id,db) - if del_rows <= 0: - raise HTTPException(status_code=404, detail="班级不存在,删除失败") - return ClassResponse(detail='删除成功',data={'id':id}) diff --git a/class_management/dao/class_management_dao.py b/class_management/dao/class_management_dao.py index fdc056d..7b4450b 100644 --- a/class_management/dao/class_management_dao.py +++ b/class_management/dao/class_management_dao.py @@ -1,6 +1,46 @@ from class_management.model.class_management_model import ClassInfo from sqlalchemy.orm import Session +#新增班级 +def add_class_dao(c,db): + try: + c1 = ClassInfo(**c) + db.add(c1) + except: + db.rollback() + return False + else: + db.commit() + return True + + +#更新班级信息 +def update_class_dao(cid,update_data,db): + try: + rows = db.query(ClassInfo)\ + .filter(ClassInfo.id == cid + ,ClassInfo.is_delete==0)\ + .update(update_data) + except : + db.rollback() + return False + else: + db.commit() + return rows + + +#删除(逻辑删除) +def delete_class_dao(cid,db): + try: + rows = db.query(ClassInfo)\ + .filter(ClassInfo.id == cid,ClassInfo.is_delete==0)\ + .update({'is_delete':1}) + db.commit() + return rows + except Exception as e: + db.rollback() + print('删除失败',e) + return 0 #查询 @@ -34,64 +74,6 @@ def get_class_dao(c:dict,db:Session) : ,'tutor_teacher_id':i.tutor_teacher_id ,'class_start_time':i.class_start_time ,'class_end_time':i.class_end_time - ,"is_delete": i.is_delete - ,"create_time": i.create_time - ,"update_time": i.update_time } for i in res ] - -#新增班级 -def add_class_dao(c:dict,db:Session): - try: - exist_class = db.query(ClassInfo)\ - .filter(ClassInfo.name == c['name'] - ,ClassInfo.is_delete == 0)\ - .first() - if exist_class: - msg = '班级名称已存在' - print(msg) - return (False,msg) - c1 = ClassInfo(**c) - db.add(c1) - db.commit() - db.refresh(c1) - return (True,None) - - except Exception as e: - db.rollback() - err_msg = f'数据库异常:{str(e)}' - print(err_msg) - return (False,err_msg) - - -#修改 -def update_class_dao(cid:int,update_data,db): - try: - rows = db.query(ClassInfo)\ - .filter(ClassInfo.id == cid - ,ClassInfo.is_delete==0)\ - .update(update_data) - db.commit() - return rows - - except Exception as e: - db.rollback() - print(f"update_class_dao异常:{e}") - return 0 - - - -#删除(逻辑删除) -def delete_class_dao(cid,db): - try: - rows = db.query(ClassInfo)\ - .filter(ClassInfo.id == cid,ClassInfo.is_delete==0)\ - .update({'is_delete':1}) - db.commit() - return rows - except Exception as e: - db.rollback() - print(f"delete_class_dao异常:{e}") - rows = 0 - diff --git a/class_management/database.py b/class_management/database.py index ab6ab23..0d38580 100644 --- a/class_management/database.py +++ b/class_management/database.py @@ -3,25 +3,24 @@ from sqlalchemy.orm import sessionmaker,declarative_base # 导入.env参数 -import os -from dotenv import load_dotenv -load_dotenv( ) -DB_USER = os.getenv("DB_USER", "root") -DB_PASSWORD = os.getenv("DB_PASSWORD", "") -DB_HOST = os.getenv("DB_HOST", "localhost") -DB_PORT = os.getenv("DB_PORT", "3306") -DB_NAME = os.getenv("DB_NAME", "student_manage_system") +# import os +# from dotenv import load_dotenv +# load_dotenv( ) +# DB_USER = os.getenv("DB_USER", "root") +# DB_PASSWORD = os.getenv("DB_PASSWORD", "") +# DB_HOST = os.getenv("DB_HOST", "localhost") +# DB_PORT = os.getenv("DB_PORT", "3306") +# DB_NAME = os.getenv("DB_NAME", "student_manage_system") +# +# class_management_url = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8mb4" -class_management_url = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8mb4" - -# class_management_url = "mysql+pymysql://root:123456@localhost:3306/student_manage_system?charset=utf8mb4" +class_management_url = "mysql+pymysql://root:123456@localhost:3306/student_manage_system?charset=utf8mb4" engine = create_engine(class_management_url) SessionLocal = sessionmaker(bind=engine,autocommit=False, autoflush=False) Base = declarative_base() # 获取数据库会话依赖 - def get_db(): db = SessionLocal() try : diff --git a/class_management/main.py b/class_management/main.py index 05f53ce..cb39ec0 100644 --- a/class_management/main.py +++ b/class_management/main.py @@ -2,7 +2,7 @@ from fastapi import FastAPI,APIRouter from class_management.api.class_management_api import class_api from class_management.model.class_management_model import ClassInfo from class_management.database import Base,engine -#import model + Classes_API = APIRouter() diff --git a/class_management/model/class_management_model.py b/class_management/model/class_management_model.py index d81a9eb..173b5e3 100644 --- a/class_management/model/class_management_model.py +++ b/class_management/model/class_management_model.py @@ -14,6 +14,7 @@ class ClassInfo(Base): ) num = Column(String(50) ,nullable=False + ,unique=True ,comment='班级编号' ) name = Column(String(50) @@ -21,26 +22,18 @@ class ClassInfo(Base): ,comment='班级名称' ) head_teacher_id = Column(Integer - # ,ForeignKey('teacher.id') + ,ForeignKey('teacher.id') ,comment='班主任编号' ) coach_teacher_id = Column(Integer - # ,ForeignKey('teacher.id') + ,ForeignKey('teacher.id') ,comment='授课老师编号' ) tutor_teacher_id = Column(Integer - # ,ForeignKey('teacher.id') + ,ForeignKey('teacher.id') ,comment='助教老师编号' ) - # class_teacher = Column(String(50) - # ,nullable=False - # ,comment='班主任' - # ) - # class_lecturer = Column(String(50) - # ,nullable=False - # ,comment='授课老师' - # ) class_start_time = Column(Date ,comment='开班日期' ) diff --git a/class_management/schema/class_management_request.py b/class_management/schema/class_management_request.py index 8e50e31..4bb6a7b 100644 --- a/class_management/schema/class_management_request.py +++ b/class_management/schema/class_management_request.py @@ -12,17 +12,14 @@ class ClassBase(BaseModel): class_start_time:date|None = Field(None,description='开班日期 YYYY‑MM‑DD') class_end_time:date|None = Field(None,description='结课日期 YYYY‑MM‑DD') -#新增班级请求体:num,name必填,其余继承父类ClassBase +#新增班级请求体:继承父类ClassBase class ClassCreate(ClassBase): - num:str = Field(...,description='班级编号') - name:str = Field(...,description='班级名称') + pass #修改班级请求体,继承ClassBase,全部字段可选,传哪个就更新哪个 class ClassUpdate(ClassBase): pass - - class ClassResponse(BaseModel): code:int = 200 detail:str = 'OK'