From 4460a16848ac944f22aaa8c6f3d3ca214fef8330 Mon Sep 17 00:00:00 2001 From: geyuan <2732801331@qq.com> Date: Tue, 22 Sep 2026 11:00:36 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=94=B9=E6=96=B0buge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 +++++++++++++++++++++ Teachers/api/tea_api.py | 6 +++--- Teachers/dao/tea_dao.py | 22 ++++++++++------------ Teachers/说明.md | 3 +++ 4 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 Teachers/说明.md diff --git a/README.md b/README.md index cdc9fd4..a9bca3f 100644 --- a/README.md +++ b/README.md @@ -1 +1,22 @@ # 学生管理系统 +## 教师篇 + +**main:主程序文件、测试接口**\ +1 下面所有配置文件的接口全部导入并建表\ +2 创建fastapi接口并本地运行\ +**api:接口文件**\ +*教师表Teacher的功能接口:*\ +1.教师信息的查询\ +2.教师信息的新增\ +3.教师信息的更新\ +4.教师信息的逻辑删除\ +**dao数据筛选文件**\ +1.查询 +2.新增 +3.更新 +4.逻辑删除 + +*qingxie* \ +***zhongdian*** + + diff --git a/Teachers/api/tea_api.py b/Teachers/api/tea_api.py index da9519f..d404f97 100644 --- a/Teachers/api/tea_api.py +++ b/Teachers/api/tea_api.py @@ -27,10 +27,10 @@ def delete_tea(id:int|None,db=Depends(get_db)): raise HTTPException(status_code=500,detail='删除失败!') return {'detail':'删除成功!'} -@tea_api.put('/tea/{id}',summary='修改老师信息',description='输入更改的信息,老师的姓名和性别不能为空,其余可以为空') +@tea_api.put('/tea/{id}',summary='更新老师信息',description='输入更改的信息,可以为空') def update_tea(id:int,tea:NewTeaRequest,db=Depends(get_db)): t = tea.model_dump(exclude_unset= True) - r = update_tea_dao(id=id,update_data=t,db=db) + r = update_tea_dao(id=id,t=t,db=db) if not r: raise HTTPException(status_code=404,detail='老师不存在') - return {'detail':'修改成功'} + return {'detail':'更新成功'} diff --git a/Teachers/dao/tea_dao.py b/Teachers/dao/tea_dao.py index ce110c6..d3bebac 100644 --- a/Teachers/dao/tea_dao.py +++ b/Teachers/dao/tea_dao.py @@ -14,17 +14,15 @@ def add_tea_dao(t,db): return True #更新 -def add_tea_dao(t, db): +def update_tea_dao(id,t, db): try: - t1 = Tea(**t) - db.add(t1) - except Exception as e: + row = db.query(Tea).filter(Tea.id == id,Tea.is_delete ==False ).update(t) + except: db.rollback() - print('新增失败原因:', e) return False else: db.commit() - return True + return row #查询 def get_tea_dao(t,db): @@ -36,7 +34,7 @@ def get_tea_dao(t,db): if t.get("sex"): query = query.filter(Tea.sex == t.get('sex') ) if t.get('class_id'): - query = query.filter(Tea.class_id == t.get('claa_id') ) + query = query.filter(Tea.class_id == t.get('class_id') ) if t.get('sub'): query = query.filter(Tea.sub == t.get('sub') ) if t.get('home_place'): @@ -49,11 +47,11 @@ def get_tea_dao(t,db): query = query.filter(Tea.work_experience == t.get('work_experience') ) if t.get('education'): query = query.filter(Tea.education == t.get('education') ) - if t.get('college'): - query = query.filter(Tea.collage == t.get('college') ) + if t.get('collage'): + query = query.filter(Tea.collage == t.get('collage') ) r = query.all() - return [{'id':i.id,'name':i.name,'class_id':i.class_id,'sub':i.sub,'tea.sex':i.sex,'home_place':i.home_place - ,'specialty':i.specialty,'start_time':i.start_time,'work_experience':i.work_experience,'college':i.college} for i in r] + return [{'id':i.id,'name':i.name,'class_id':i.class_id,'sub':i.sub,'sex':i.sex,'home_place':i.home_place + ,'specialty':i.specialty,'start_time':i.start_time,'work_experience':i.work_experience,'collage':i.collage} for i in r] #删除 def delete_tea_dao(id,db): @@ -64,7 +62,7 @@ def delete_tea_dao(id,db): except: db.rollback() row = 0 - return + return row else: db.commit() return row diff --git a/Teachers/说明.md b/Teachers/说明.md new file mode 100644 index 0000000..3e036c2 --- /dev/null +++ b/Teachers/说明.md @@ -0,0 +1,3 @@ +# 教培系统架构设计与开发## +## 2 +### 3 \ No newline at end of file From 273bee1ea2617ed058367ae7d78bb8b9c34202e5 Mon Sep 17 00:00:00 2001 From: geyuan <2732801331@qq.com> Date: Tue, 22 Sep 2026 13:54:00 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++++++++++----- Teachers/api/tea_api.py | 10 ++++++++++ Teachers/dao/tea_dao.py | 35 ++++++++++++++++++++++++++++++++++ Teachers/database.py | 10 ++++++++++ Teachers/main.py | 4 +++- Teachers/schema/tea_request.py | 2 +- 6 files changed, 71 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a9bca3f..c0e8a05 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,18 @@ 3.教师信息的更新\ 4.教师信息的逻辑删除\ **dao数据筛选文件**\ -1.查询 -2.新增 -3.更新 -4.逻辑删除 - +1.查询 get_tea_dao:\ +2.新增 add_tea_dao:\ +3.更新 update_tea_dao:\ +4.逻辑删除 delete_tea_dao:\ +**tea_model数据库建表文件**\ +字段名:id、name、sex、class_id、sub(学科)\ +home_place specialty(专业)、start_time(入职时间)\ +work_experience、collage、creat_date、update_date\ +is_delete、delete_time\ +**schema 请求体、响应体**\ +请求体 +响应体 *qingxie* \ ***zhongdian*** diff --git a/Teachers/api/tea_api.py b/Teachers/api/tea_api.py index d404f97..b7faddd 100644 --- a/Teachers/api/tea_api.py +++ b/Teachers/api/tea_api.py @@ -34,3 +34,13 @@ def update_tea(id:int,tea:NewTeaRequest,db=Depends(get_db)): if not r: raise HTTPException(status_code=404,detail='老师不存在') return {'detail':'更新成功'} + +#根据任意信息删除 +@tea_api.delete('/tea',summary='根据任意信息逻辑删除',description='输入任意信息删除') +def delete_other_tea_dao1(t:TeaRequest,db=Depends(get_db)): + row1 = delete_other_tea_dao(t.model_dump(exclude_unset=True),db) + if not row1: + raise HTTPException(status_code=404,detail='没有找到符合条件的老师') + return{'code':200,'data':row1} + + diff --git a/Teachers/dao/tea_dao.py b/Teachers/dao/tea_dao.py index d3bebac..b381515 100644 --- a/Teachers/dao/tea_dao.py +++ b/Teachers/dao/tea_dao.py @@ -67,4 +67,39 @@ def delete_tea_dao(id,db): db.commit() return row +def delete_other_tea_dao(t,db): + if not t: + return False + try: + query1 = db.query(Tea).filter(Tea.is_delete == False) + if t.get('id'): + query1 = query1.filter(Tea.id == t.get('id') ) + if t.get('name'): + query1 = query1.filter(Tea.name == t.get('name') ) + if t.get('sex'): + query1 = query1.filter(Tea.sex == t.get('sex')) + if t.get('class_id'): + query1 = query1.filter(Tea.class_id == t.get('class_id')) + if t.get('sub'): + query1 = query1.filter(Tea.sub == t.get('sub')) + if t.get('home_place'): + query1 = query1.filter(Tea.home_place == t.get('home_place')) + if t.get('collage'): + query1 = query1.filter(Tea.collage == t.get('collage')) + if t.get('education'): + query1 = query1.filter(Tea.education == t.get('education')) + if t.get('work_experience'): + query1 = query1.filter(Tea.work_experience == t.get('work_experience')) + if t.get('start_time'): + query1 = query1.filter(Tea.start_time == t.get('start_time')) + if t.get('specialty'): + query1 = query1.filter(Tea.specialty == t.get('specialty')) + row = query1.update({'is_delete':True,'delete_time':datetime.now()}) + db.commit() + return row + except Exception as e: + db.rollback() + print('删除失败',e) + return '删除失败' + diff --git a/Teachers/database.py b/Teachers/database.py index 07ef505..545747e 100644 --- a/Teachers/database.py +++ b/Teachers/database.py @@ -1,6 +1,16 @@ from sqlalchemy import * 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") + db_tea = 'mysql+pymysql://root:123456@127.0.0.1:3306/student_manage_system?charset=utf8mb4' engine1 = create_engine(db_tea) diff --git a/Teachers/main.py b/Teachers/main.py index 1ec14a3..4efc393 100644 --- a/Teachers/main.py +++ b/Teachers/main.py @@ -1,6 +1,8 @@ -from fastapi import FastAPI +from fastapi import FastAPI,APIRouter from Teachers.model.tea_model import * from api.tea_api import tea_api + +Teachers_API = APIRouter() app = FastAPI() app.include_router(tea_api) diff --git a/Teachers/schema/tea_request.py b/Teachers/schema/tea_request.py index 2bf3165..f5a275a 100644 --- a/Teachers/schema/tea_request.py +++ b/Teachers/schema/tea_request.py @@ -16,7 +16,7 @@ class TeaRequest(BaseModel): specialty: str|None = None -#更新、新增使用请求体(无法覆盖) +#更新、任意逻辑删除、新增使用请求体,没有自增键 class NewTeaRequest(BaseModel): name: str | None = None sex: Gender From d99eb7367db8e5a5a354e38d0ab4b41d61011d66 Mon Sep 17 00:00:00 2001 From: geyuan <2732801331@qq.com> Date: Tue, 22 Sep 2026 14:36:10 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=9A=84=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Teachers/.env | 7 +++++++ Teachers/api/tea_api.py | 2 +- Teachers/dao/tea_dao.py | 1 + Teachers/database.py | 4 ++-- Teachers/main.py | 8 ++++++-- 5 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 Teachers/.env diff --git a/Teachers/.env b/Teachers/.env new file mode 100644 index 0000000..bbd34b4 --- /dev/null +++ b/Teachers/.env @@ -0,0 +1,7 @@ +# .env(放项目根目录,每个人自己建,不提交 Git) + # 用来修改数据库账户密码 +DB_USER=root +DB_PASSWORD=123456 +DB_HOST=localhost +DB_PORT=3306 +DB_NAME=student_manage_system \ No newline at end of file diff --git a/Teachers/api/tea_api.py b/Teachers/api/tea_api.py index b7faddd..8fc7ddc 100644 --- a/Teachers/api/tea_api.py +++ b/Teachers/api/tea_api.py @@ -6,7 +6,7 @@ from Teachers.dao.tea_dao import * from Teachers.schema.tea_request import TeaRequest,NewTeaRequest from Teachers.schema.tea_response import TeaResponse -tea_api = APIRouter(tags=['老师相关接口']) +tea_api = APIRouter() @tea_api.post('/tea',response_model=TeaResponse,summary='新增老师',description='输入新增的老师信息,除去姓名外可以为空') def add_tea(tea: NewTeaRequest,db=Depends(get_db)): diff --git a/Teachers/dao/tea_dao.py b/Teachers/dao/tea_dao.py index b381515..df8fdfa 100644 --- a/Teachers/dao/tea_dao.py +++ b/Teachers/dao/tea_dao.py @@ -103,3 +103,4 @@ def delete_other_tea_dao(t,db): return '删除失败' + diff --git a/Teachers/database.py b/Teachers/database.py index 545747e..7e17ed4 100644 --- a/Teachers/database.py +++ b/Teachers/database.py @@ -11,8 +11,8 @@ DB_HOST = os.getenv("DB_HOST", "localhost") DB_PORT = os.getenv("DB_PORT", "3306") DB_NAME = os.getenv("DB_NAME", "student_manage_system") -db_tea = 'mysql+pymysql://root:123456@127.0.0.1:3306/student_manage_system?charset=utf8mb4' -engine1 = create_engine(db_tea) +db_url = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8mb4" +engine1 = create_engine(db_url) Base = declarative_base() Session = sessionmaker(bind=engine1 diff --git a/Teachers/main.py b/Teachers/main.py index 4efc393..1cd982d 100644 --- a/Teachers/main.py +++ b/Teachers/main.py @@ -1,10 +1,14 @@ from fastapi import FastAPI,APIRouter from Teachers.model.tea_model import * -from api.tea_api import tea_api +from Teachers.api.tea_api import tea_api +# 合并接口 Teachers_API = APIRouter() +Teachers_API.include_router(tea_api) + +# 自测接口 app = FastAPI() -app.include_router(tea_api) +app.include_router(tea_api,tags=["老师"]) Base.metadata.create_all(engine1) From a415a7c35eaa7ea9e1ab213c2a61b532328ebb83 Mon Sep 17 00:00:00 2001 From: geyuan <2732801331@qq.com> Date: Tue, 22 Sep 2026 14:39:20 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E7=9A=84=E6=96=87=E5=AD=97=E4=BB=8B=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c0e8a05..e7b7fc1 100644 --- a/README.md +++ b/README.md @@ -21,9 +21,9 @@ home_place specialty(专业)、start_time(入职时间)\ work_experience、collage、creat_date、update_date\ is_delete、delete_time\ **schema 请求体、响应体**\ -请求体 -响应体 -*qingxie* \ -***zhongdian*** +请求体:设置了两个,一个带自增组件用于查询\ +一个不带自增组件,新增用;\ +响应体:用于返回给前端 + From 6de3d1dd22407cbb950d9ffe0e79b6f86a1061e7 Mon Sep 17 00:00:00 2001 From: geyuan <2732801331@qq.com> Date: Tue, 22 Sep 2026 15:19:19 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=A7=91=E7=9B=AE?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ Teachers/model/tea_model.py | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e7b7fc1..44357a2 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,13 @@ 3.更新 update_tea_dao:\ 4.逻辑删除 delete_tea_dao:\ **tea_model数据库建表文件**\ +1.教师表\ 字段名:id、name、sex、class_id、sub(学科)\ home_place specialty(专业)、start_time(入职时间)\ work_experience、collage、creat_date、update_date\ is_delete、delete_time\ +2.学科表\ +字段名:name(科目名字) **schema 请求体、响应体**\ 请求体:设置了两个,一个带自增组件用于查询\ 一个不带自增组件,新增用;\ diff --git a/Teachers/model/tea_model.py b/Teachers/model/tea_model.py index 68a09c4..986d7fe 100644 --- a/Teachers/model/tea_model.py +++ b/Teachers/model/tea_model.py @@ -6,6 +6,7 @@ import enum class Gender(str,enum.Enum): m = '男' f = '女' + h = '未知' class Tea(Base): __tablename__ = 'teachers' @@ -44,5 +45,11 @@ class Tea(Base): ,comment='更新时间') is_delete = Column(Boolean,default=False,comment='是否删除') delete_time = Column(DateTime) - +#科目表 +class Sub(Base): + __tablename__ = 'subject' + name = Column(String(50) + , primary_key=True + ,nullable=False + ,comment='科目名字') From daed5971ea5088827834b9db1ec49da69f728858 Mon Sep 17 00:00:00 2001 From: geyuan <2732801331@qq.com> Date: Tue, 22 Sep 2026 15:33:09 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A7=91=E7=9B=AE?= =?UTF-8?q?=E8=A1=A8=E7=9A=84id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- Teachers/model/tea_model.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 44357a2..e3a1f6f 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ home_place specialty(专业)、start_time(入职时间)\ work_experience、collage、creat_date、update_date\ is_delete、delete_time\ 2.学科表\ -字段名:name(科目名字) +字段名:id,name(科目名字) **schema 请求体、响应体**\ 请求体:设置了两个,一个带自增组件用于查询\ 一个不带自增组件,新增用;\ diff --git a/Teachers/model/tea_model.py b/Teachers/model/tea_model.py index 986d7fe..a5ef706 100644 --- a/Teachers/model/tea_model.py +++ b/Teachers/model/tea_model.py @@ -48,8 +48,12 @@ class Tea(Base): #科目表 class Sub(Base): __tablename__ = 'subject' + id = Column(Integer + , primary_key=True + , nullable=False + , autoincrement=True + , comment='id') name = Column(String(50) - , primary_key=True ,nullable=False ,comment='科目名字')