55 lines
2.8 KiB
Python
55 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
|