From 0cb1d8e1965854c11e218d8fbb341b56248c0380 Mon Sep 17 00:00:00 2001 From: wangtian <1582714703@qq.com> Date: Tue, 22 Sep 2026 17:29:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=81=E5=B8=88=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/teacher_api.py | 41 ++++++++++++++++++++++++++++++ api/teacher_course_api.py | 25 ++++++++++++++++++ dao/teacher_course_dao.py | 24 ++++++++++++++++++ dao/teacher_dao.py | 53 +++++++++++++++++++++++++++++++++++++++ main.py | 7 ++++++ model/teacher_model.py | 40 +++++++++++++++++++++++++++++ schema/teacher_schema.py | 45 +++++++++++++++++++++++++++++++++ 7 files changed, 235 insertions(+) create mode 100644 api/teacher_api.py create mode 100644 api/teacher_course_api.py create mode 100644 dao/teacher_course_dao.py create mode 100644 dao/teacher_dao.py create mode 100644 model/teacher_model.py create mode 100644 schema/teacher_schema.py diff --git a/api/teacher_api.py b/api/teacher_api.py new file mode 100644 index 0000000..02f7383 --- /dev/null +++ b/api/teacher_api.py @@ -0,0 +1,41 @@ +from fastapi import APIRouter,Depends,HTTPException +from schema.teacher_schema import TeacherRequest,TeacherResponse,TeacherUpdateRequest +from database import get_db +from dao.teacher_dao import add_teacher_dao,update_teacher_dao,get_teacher_dao,delete_teacher_dao + +TeacherAPI = APIRouter() + +@TeacherAPI.post('/teachers',response_model=TeacherResponse,summary='新增老师') +def add_teachers(teacher:TeacherRequest,db=Depends(get_db)): + d = teacher.model_dump() + r = add_teacher_dao(t=d,db=db) + if not r: + raise HTTPException(status_code=400,detail='教师编号已存在或新增失败!') + return teacher + + +@TeacherAPI.put('/teachers/{teacher_id}',summary='更新老师') +def update_teachers(teacher_id:str,teacher:TeacherUpdateRequest,db=Depends(get_db)): + d = teacher.model_dump(exclude_unset=True) + r = update_teacher_dao(teacher_id=teacher_id,data=d,db=db) #返回更新的行数 + if not r: + raise HTTPException(status_code=404,detail='老师不存在或未更新!') + return {'code':200,'totals':r,'detail':'更新成功'} + + +@TeacherAPI.get('/teachers',response_model=list[TeacherResponse],summary='查询老师') +def get_teachers(teacher_id:str|None=None, + teacher_name:str|None=None, + db=Depends(get_db)): + r = get_teacher_dao(teacher_id=teacher_id,teacher_name=teacher_name,db=db) + if not r: + raise HTTPException(status_code=404,detail='该老师不存在!') + return r + + +@TeacherAPI.delete('/teachers/{teacher_id}',summary='删除老师') +def delete_teachers(teacher_id:str|None = None,db=Depends(get_db)): + r = delete_teacher_dao(teacher_id,db) + if not r: + raise HTTPException(status_code=404,detail='老师不存在或删除失败!') + return {'code':200,'totals':r,'detail':'删除成功!'} \ No newline at end of file diff --git a/api/teacher_course_api.py b/api/teacher_course_api.py new file mode 100644 index 0000000..6abdef2 --- /dev/null +++ b/api/teacher_course_api.py @@ -0,0 +1,25 @@ +from fastapi import APIRouter,Depends,HTTPException +from schema.teacher_schema import TeacherCourseRequest,TeacherCourseResponse +from database import get_db +from dao.teacher_course_dao import add_teacher_course_dao,get_teacher_course_dao + + +TeacherCourseAPI = APIRouter() + + +@TeacherCourseAPI.post('/teacher_courses',response_model=TeacherCourseResponse,summary='新增老师课程') +def add_teacher_courses(teachercourse:TeacherCourseRequest,db=Depends(get_db)): + d = teachercourse.model_dump() + r = add_teacher_course_dao(t=d,db=db) + if not r: + raise HTTPException(status_code=400,detail='新增课程失败!') + return d + + +@TeacherCourseAPI.get('/teacher_courses',response_model=list[TeacherCourseResponse],summary='查询老师课程') +def get_teacher_courses(teacher_id:str, + db=Depends(get_db)): + r = get_teacher_course_dao(teacher_id=teacher_id,db=db) + if not r: + raise HTTPException(status_code=404,detail='该老师不存在!') + return r \ No newline at end of file diff --git a/dao/teacher_course_dao.py b/dao/teacher_course_dao.py new file mode 100644 index 0000000..c18270b --- /dev/null +++ b/dao/teacher_course_dao.py @@ -0,0 +1,24 @@ +from model.teacher_model import TeacherCourse + + +def add_teacher_course_dao(t,db): + try: #判断是都已存在 + r = db.query(TeacherCourse).filter(TeacherCourse.teacher_id==t['teacher_id']).first() + if r: + return None #已存在,交给上层判断 + obj = TeacherCourse(**t) + db.add(obj) + db.commit() + db.refresh(obj) #拿回自增id,create_time等 + return obj + except Exception: + db.rollback() + return False + + +def get_teacher_course_dao(teacher_id=None,db=None): + q = db.query(TeacherCourse) + if teacher_id: + q = q.filter(TeacherCourse.teacher_id==teacher_id) + return q.all() #返回ORM对象列表 + diff --git a/dao/teacher_dao.py b/dao/teacher_dao.py new file mode 100644 index 0000000..0b9580e --- /dev/null +++ b/dao/teacher_dao.py @@ -0,0 +1,53 @@ +from model.teacher_model import Teacher + + +def add_teacher_dao(t,db): + try: #判断是都已存在 + r = db.query(Teacher).filter(Teacher.teacher_id==t['teacher_id']).first() + if r: + return None #已存在,交给上层判断 + obj = Teacher(**t) + db.add(obj) + + db.commit() + db.refresh(obj) #拿回自增id,create_time等 + return obj + except Exception: + db.rollback() + return False + +def update_teacher_dao(teacher_id,data,db): #data:新增的内容 + try: #数据更新有返回值,返回的是影响的行数 + rows = db.query(Teacher).filter(Teacher.teacher_id == teacher_id).update(data) + db.commit() + return rows + except Exception: + db.rollback() + return False + + + + +def get_teacher_dao(teacher_id=None,teacher_name=None,db=None): + q = db.query(Teacher) + if teacher_id: + q = q.filter(Teacher.teacher_id==teacher_id) + if teacher_name: + q = q.filter(Teacher.teacher_name.like (f'%{teacher_name}%')) + return q.all() #返回ORM对象列表 + + + +def delete_teacher_dao(teacher_id,db): + try: #删除有返回值,删除的行数 + rows = (db.query(Teacher) + .filter(Teacher.teacher_id == teacher_id) + .delete()) + db.commit() + return rows + except Exception: + db.rollback() + return 0 + + + diff --git a/main.py b/main.py index ca27774..82bf666 100644 --- a/main.py +++ b/main.py @@ -5,6 +5,8 @@ from api.calss import class_api from api.employment_api import app as employment_router from api.student_info_api import student_info_api from api.region_api import region_api +from api.teacher_api import TeacherAPI +from api.teacher_course_api import TeacherCourseAPI from starlette.middleware.cors import CORSMiddleware @@ -24,6 +26,11 @@ app.include_router(student_info_api,tags=['学生信息']) app.include_router(region_api,tags=['地区信息']) + +app.include_router(TeacherAPI,tags=['老师信息']) + +app.include_router(TeacherCourseAPI,tags=['老师课程信息']) + app.include_router(employment_router) diff --git a/model/teacher_model.py b/model/teacher_model.py new file mode 100644 index 0000000..ee7e15c --- /dev/null +++ b/model/teacher_model.py @@ -0,0 +1,40 @@ +from database import DATETIME,Base,engine +from datetime import datetime +from sqlalchemy import Column,String,Date,Integer + + + +class Teacher(Base): + __tablename__ = 'teacher_info' + id = Column(Integer,primary_key=True,autoincrement=True,comment='自增主键id') + teacher_id = Column(String(20),nullable=False,unique=True,comment='教师编号') + teacher_name = Column(String(50),nullable=False,comment='老师姓名') + gender = Column(Integer,nullable=False,comment='性别:0=女,1=男') + birthday = Column(Date,nullable=True,comment='出生年月') + native_region_code = Column(String(12),nullable=True,comment='籍贯地区编码') + email = Column(String(100),nullable=True,comment='邮箱') + phone = Column(String(11),nullable=False,comment='手机号') + graduation_school = Column(String(20),nullable=True,comment='毕业院校') + is_deleted = Column(Integer,nullable=False,default=0,comment='逻辑删除:0=未删除,1=已删除') + create_time = Column(DATETIME,nullable=False,default=datetime.now,comment='创建时间') + update_time = Column(DATETIME,default=datetime.now,onupdate=datetime.now,comment='更新时间') + + + +class TeacherCourse(Base): + __tablename__ = 'teacher_course' + id = Column(Integer,primary_key=True,autoincrement=True,comment='记录ID') + teacher_id = Column(String(20),nullable=False,comment='教师编号') + course_id = Column(String(20),nullable=False,comment='任课科目编号') + is_deleted = Column(Integer,nullable=False,default=0,comment='逻辑删除:0=未删除,1=已删除') + create_time = Column(DATETIME,nullable=False,default=datetime.now,comment='创建时间') + update_time = Column(DATETIME,nullable=False,default=datetime.now,onupdate=datetime.now,comment='更新时间') + + + +if __name__ == "__main__": + Base.metadata.create_all(engine) + print("数据表创建完成!") + + + diff --git a/schema/teacher_schema.py b/schema/teacher_schema.py new file mode 100644 index 0000000..5f442dd --- /dev/null +++ b/schema/teacher_schema.py @@ -0,0 +1,45 @@ +from pydantic import BaseModel +from datetime import date + +from typing import Literal + +class TeacherRequest(BaseModel): #Teacher请求体模型 + teacher_id: str + teacher_name: str + gender: Literal[1,0] + birthday: date|None = None + native_region_code: str|None = None + email: str|None = None + phone: str + graduation_school: str|None = None + +class TeacherUpdateRequest(BaseModel): + teacher_name: str|None = None + gender: Literal[1,0]|None = None + birthday: date | None = None + native_region_code: str | None = None + email: str | None = None + phone: str + graduation_school: str | None = None + + +class TeacherResponse(BaseModel): #Teacher响应体模型 + teacher_id: str + teacher_name: str + gender: Literal[1,0] + birthday: date|None = None + native_region_code: str|None = None + email: str|None = None + phone: str + graduation_school: str|None = None + +class TeacherCourseRequest(BaseModel): #TeacherCourse请求体模型 + teacher_id: str|None = None + course_id: str|None = None + +class TeacherCourseResponse(BaseModel): #老师带班信息及课程表响应体模型 + teacher_id: str|None = None + course_id: str|None = None + model_config = {"from_attributes": True} #可以直接读取ORM模型对象,不用手动转字典 + +