Files
2026-09-21 19:22:31 +08:00

61 lines
2.8 KiB
Python

from sqlalchemy.orm import Session
from model.teacher_model import Teacher
from schema.teacher_schema import TeacherCreate, TeacherUpdate
# ============本文件封装对 teacher 表的所有数据库操作(增、删、改、查)=========
class TeacherDao:
@staticmethod
def get_teacher_by_id(db: Session, tid: int):
"""根据id查询老师,只查未逻辑删除"""
return db.query(Teacher).filter(
Teacher.tid == tid, # 传入tid参数等于老师表tid
Teacher.is_deleted == 1 # 且未逻辑删除
).first() # 满足条件的第一条数据
@staticmethod
def get_teacher_list(db: Session, skip: int = 0, limit: int = 10):
"""分页查询老师列表"""
return db.query(Teacher).filter(Teacher.is_deleted == 1).offset(skip).limit(limit).all()
#返回 筛选出未删除的老师列表(每10条数据一页)
@staticmethod
def create_teacher(db: Session, teacher: TeacherCreate): # 1打开会话对象。2前端传过来已校验的json
"""新增老师"""
db_teacher = Teacher(**teacher.model_dump()) # **拆包 model_dump(): 把pydantic对象转为字典。
db.add(db_teacher) # orm实例对象添加到缓存
db.commit() # 提交事务,真正写入数据库
db.refresh(db_teacher) # 刷新,查询回填自增主键tid
return db_teacher
@staticmethod
def update_teacher(db: Session, t_id: int, teacher: TeacherUpdate):
"""根据老师tid修改信息"""
db_teacher = TeacherDao.get_teacher_by_id(db, t_id) # 调用id查询Dao方法
if not db_teacher: # 判断在不在老师表
return None #查不到返回None,前端报404
update_data = teacher.model_dump(exclude_unset=True) # exclude_unset=True:只保留前端传过来的字段
for key, value in update_data.items(): # 循环遍历,拆开取出键值
setattr(db_teacher, key, value) # 给orm象动态赋值
db.commit()
db.refresh(db_teacher)
return db_teacher
@staticmethod
def delete_teacher(db: Session, t_id: int):
"""逻辑删除老师:不删数据库,修改is_deleted字段"""
db_teacher = TeacherDao.get_teacher_by_id(db, t_id) # 调用id查询Dao方法
if not db_teacher:
return False
db_teacher.is_deleted = 0 # 修改逻辑删除字段,0=已删除
db.commit()
return True