60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
# dao/teache_dao.py
|
|
# 本文件封装对老师表的所有数据库操作(增、删、改、查)
|
|
from fastapi import HTTPException
|
|
from sqlalchemy.orm import Session
|
|
|
|
from model.teacher import Teacher
|
|
from scheme.teachers import TeacherCreate, TeacherUpdate
|
|
|
|
|
|
class TeacherDAO:
|
|
|
|
# 多条件查询老师列表
|
|
@staticmethod
|
|
def get_list(db: Session, teacher_name=None, is_headteacher=None, page=1, size=10):
|
|
query = db.query(Teacher).filter(Teacher.flag == 1)
|
|
if teacher_name:
|
|
query = query.filter(Teacher.teacher_name.like(f"%{teacher_name}%"))
|
|
if is_headteacher:
|
|
query = query.filter(Teacher.is_headteacher == is_headteacher)
|
|
total = query.count()
|
|
items = (query.order_by(Teacher.teacher_id).offset((page - 1) * size).limit(size).all())
|
|
return total, items
|
|
|
|
# 按老师编号查单个老师
|
|
@staticmethod
|
|
def get_by_id(db: Session, teacher_id: int):
|
|
teacher = db.query(Teacher).filter(Teacher.teacher_id == teacher_id, Teacher.flag == 1).first()
|
|
if not teacher:
|
|
raise HTTPException(status_code=404, detail=f"老师 {teacher_id} 不存在")
|
|
return teacher
|
|
|
|
# 新增老师
|
|
@staticmethod
|
|
def create(db: Session, data: TeacherCreate):
|
|
teacher = Teacher(**data.model_dump())
|
|
teacher.flag = 1
|
|
db.add(teacher)
|
|
db.commit()
|
|
db.refresh(teacher)
|
|
return teacher
|
|
|
|
# 更新老师信息
|
|
@staticmethod
|
|
def update(db: Session, teacher_id: int, data: TeacherUpdate):
|
|
update_data = data.model_dump(exclude_unset=True)
|
|
db.query(Teacher) \
|
|
.filter(Teacher.teacher_id == teacher_id) \
|
|
.update(update_data)
|
|
db.commit()
|
|
return TeacherDAO.get_by_id(db, teacher_id)
|
|
|
|
# 逻辑删除老师
|
|
@staticmethod
|
|
def delete(db: Session, teacher_id: int):
|
|
teacher = TeacherDAO.get_by_id(db, teacher_id)
|
|
teacher.flag = 0
|
|
db.commit()
|
|
db.refresh(teacher)
|
|
return teacher
|