Files
sss/student_system_final/dao/teacher_dao.py
T
2026-09-21 22:13:04 +08:00

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