From 0adda8e337f6f429dc4a299d8265a5061a9e02e4 Mon Sep 17 00:00:00 2001 From: wolin_ck666_999 Date: Tue, 22 Sep 2026 13:12:59 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=87=B3=E3=80=8Capi=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/teaApi.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 api/teaApi.py diff --git a/api/teaApi.py b/api/teaApi.py new file mode 100644 index 0000000..31df767 --- /dev/null +++ b/api/teaApi.py @@ -0,0 +1,67 @@ +from fastapi import APIRouter,Depends,UploadFile,File,Query +from model.teaModel import Session +from dao.teaDao import insert_teachers_dao,update_teachers_dao,delete_teachers_dao,get_teachers_limit_dao,get_teachers_name_dao +from schema.teaSchema import RequestModel, ResponseModel + +t_router = APIRouter() + +def get_db(): + db = Session() + try: + yield db + finally: + db.close() + + +@t_router.get("/teachers",tags=['教师接口信息'],summary='分页查询教师接口') +def get_teachers(p:int=Query(default=0,ge=0,description='页码,0表示查询全部'), + n:int=Query(default=0,ge=0,description='每页条数,0表示查询全部'), + db=Depends(get_db)): + db_teachers = get_teachers_limit_dao(p,n,db) + return ResponseModel(data=db_teachers,total=len(db_teachers)) + +@t_router.get("/teachers/{name}",tags=['教师接口信息'],summary='分页查询教师接口') +def get_name_teachers(name:str,db=Depends(get_db)): + db_teachers = get_teachers_name_dao(name,db) + return ResponseModel(data=db_teachers,total=len(db_teachers)) + +@t_router.post("/teachers",tags=['教师接口信息'],summary='新增教师接口') +def insert_teachers(req:RequestModel,db=Depends(get_db)): + rq= req.model_dump() + n,m = insert_teachers_dao(rq,db) + # print('打印获取的值:',n,m) + return ResponseModel(total=n,msg=m) + +@t_router.put("/teachers/{t_id}",tags=['教师接口信息'],summary='更新教师接口') +def update_teachers(req:RequestModel,t_id:int,db=Depends(get_db),): + rq= req.model_dump() + n,m = update_teachers_dao(rq,db,t_id) + return ResponseModel(total=n,msg=m) + +@t_router.delete("/teachers/{t_id}",tags=['教师接口信息'],summary='删除教师接口') +def delete_teachers(t_id:int,db=Depends(get_db)): + n,m =delete_teachers_dao(t_id,db) + return ResponseModel(msg=m,total=n) + +@t_router.post('/files',tags=['文件接口信息'],summary='上传文件接口') +async def upload_files(f:UploadFile=File(),db=Depends(get_db)): + # print('UploadFile上传文件,读取该对象:',f) + text =await f.read() + l =text.decode('utf-8').split('\n') + lg = 0 + dt = [] + print('长度为',lg,l) + for i in l: + if '名字' in i: + continue + p = i.split() + if not p: # 判断如果p为[],跳过 + continue + l2 = ['t_name','t_age','t_phone','t_sex','class_id'] + d =dict() + for j in range(len(p)): + d[l2[j]]=p[j] + insert_teachers_dao(d,db) + lg = lg + 1 + dt.append(d) + return ResponseModel(msg='上传成功',total=lg,data=dt) From 9862e8f23780e265094ac98ea3a826066da1a318 Mon Sep 17 00:00:00 2001 From: wolin_ck666_999 Date: Tue, 22 Sep 2026 13:13:16 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=87=B3=E3=80=8Cdao=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/teaDao.py | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 dao/teaDao.py diff --git a/dao/teaDao.py b/dao/teaDao.py new file mode 100644 index 0000000..15ae598 --- /dev/null +++ b/dao/teaDao.py @@ -0,0 +1,63 @@ +from sqlalchemy.exc import SQLAlchemyError +from fastapi import HTTPException +from model.teaModel import Teacher + +def get_teachers_limit_dao(p,n,db): + if p == 0 and n == 0: + r = db.query(Teacher).all() + else: + if p < 1: + p = 1 + r = db.query(Teacher).offset((p-1)*n).limit(n).all() + return [ {'id':i.id,'t_name':i.t_name,'t_sex':i.t_sex,'t_age':i.t_age} for i in r] + + +def get_teachers_name_dao(name,db): + try: + r = db.query(Teacher).filter(Teacher.t_name==name).all() + except SQLAlchemyError as e: + db.rollback() + raise HTTPException(status_code=500, detail=f'查询失败:{str(e)}') + else: + return [ {'id':i.id,'t_name':i.t_name,'t_sex':i.t_sex,'t_age':i.t_age} for i in r] + +def insert_teachers_dao(req,db): + try: + exist = db.query(Teacher).filter(Teacher.t_phone==req['t_phone']).first() + if exist: + raise HTTPException(status_code=400,detail='该手机号码已存在,不可重复使用') + t = Teacher(**req) + db.add(t) + except SQLAlchemyError as e: + db.rollback() + raise HTTPException(status_code=500,detail=f'添加失败:{str(e)}') + else: + db.commit() + return True,'添加成功' + +def update_teachers_dao(req,db,t_id): + try: + db.query(Teacher).filter(Teacher.id == t_id).update(req) + except SQLAlchemyError as e: + db.rollback() + raise HTTPException(status_code=500,detail=f'更新失败:{str(e)}') + else: + db.commit() + return True,'更新成功' + +def delete_teachers_dao(t_id,db): + try: + r = db.query(Teacher).filter(Teacher.id == t_id).all() + if not r: + raise HTTPException(status_code=404,detail='记录不存在') + for i in r: + if i.is_delete == 0: + db.query(Teacher).filter(Teacher.id == i.id).update({'is_delete':True}) + else: + raise HTTPException(status_code=400,detail='该记录已删除,不可重复删除') + except SQLAlchemyError as e: + db.rollback() + raise HTTPException(status_code=500,detail=f'删除失败:{str(e)}') + else: + db.commit() + return True,'删除成功' From 16c4d389e2382d84da9a7647553340f3e48863f0 Mon Sep 17 00:00:00 2001 From: wolin_ck666_999 Date: Tue, 22 Sep 2026 13:13:36 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=87=B3=E3=80=8Cmodel=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/teaModel.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 model/teaModel.py diff --git a/model/teaModel.py b/model/teaModel.py new file mode 100644 index 0000000..0d4b84e --- /dev/null +++ b/model/teaModel.py @@ -0,0 +1,28 @@ +from sqlalchemy import Integer, String, Column, DateTime, Enum as SQLEnum,Boolean,create_engine +from sqlalchemy.orm import declarative_base,sessionmaker + +from enum import Enum +from datetime import datetime + +tea_url ='mysql+pymysql://root:123456@127.0.0.1:3306/ai0824_stu?charset=utf8' + +engine = create_engine(tea_url,pool_size=100, echo=False) +Base = declarative_base() +class Sex(Enum): + w = '女' + m = '男' + +class Teacher(Base): + __tablename__ = 's_teacher' + id =Column(Integer, primary_key=True,autoincrement=True) + t_name = Column(String(100),comment='教师名称') + t_age = Column(Integer,comment='年龄') + t_phone = Column(String(20),unique=True,comment='电话') + t_sex = Column(SQLEnum(Sex,values_callable=lambda x: [e.value for e in x]),comment='性别') + class_id = Column(String(100),comment='带班编号') + create_time = Column(DateTime,default=datetime.now,comment='创建时间') + update_time = Column(DateTime,default=datetime.now,onupdate=datetime.now,comment='更新时间') + is_delete = Column(Boolean,default=False,comment='判断是否删除') + +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine,autoflush=False,autocommit=False) \ No newline at end of file From 82de4eb3ae0ee218ac6c987e4aabe05058ba9eca Mon Sep 17 00:00:00 2001 From: wolin_ck666_999 Date: Tue, 22 Sep 2026 13:14:04 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=87=B3=E3=80=8Cschema=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- schema/teaSchema.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 schema/teaSchema.py diff --git a/schema/teaSchema.py b/schema/teaSchema.py new file mode 100644 index 0000000..323e05b --- /dev/null +++ b/schema/teaSchema.py @@ -0,0 +1,16 @@ +from pydantic import BaseModel,Field +from model.teaModel import Sex + + +class RequestModel(BaseModel): + t_name: str=Field(min_length=2,max_length=20) + t_sex:Sex + t_age: int=Field(gt=0) + t_phone: str=Field(min_length=11) + class_id: str + +class ResponseModel(BaseModel): + code: int = 200 + msg: str = '操作成功' + total: int = 0 + data: list=Field(default=[])