增加了num的唯一键,修改了dao和api
This commit is contained in:
@@ -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})
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 :
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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='开班日期'
|
||||
)
|
||||
|
||||
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user