from schemas.student import * from core.database import get_db from models.student import * from sqlalchemy.orm import Session def create_students(d: dict, db: Session): stu = Student(**d) try: db.add(stu) # 把 SQL 发给数据库执行 db.flush() # 根据 id 生成学生编号 if not stu.student_no: stu.student_no = f"STU{stu.id:04d}" db.commit() db.refresh(stu) return stu except Exception as e: db.rollback() print(f"插入学生失败: {e}") return None def get_student_by_id(student_id: int, db: Session): # 同时判断 is_deleted,已经逻辑删除的学生不会被查到 return db.query(Student).filter( Student.id == student_id, Student.is_deleted == 0, ).first() def update_student(student_id: int, data: dict, db: Session): # 第一步:先查询学生 student = get_student_by_id(student_id, db) # 没有查到就返回 None if not student: return None try: # 第二步:循环修改前端传来的字段 # field 是字段名,value 是新的值 for field, value in data.items(): setattr(student, field, value) # 第三步:提交修改并重新读取数据 db.commit() db.refresh(student) return student except Exception as e: # 修改失败时回滚 db.rollback() print("修改学生失败:", e) return False def get_students( db: Session, student_no: str | None = None, student_name: str | None = None, class_id: int | None = None, ): # 第一步:只查询没有被删除的学生 query = db.query(Student).filter(Student.is_deleted == 0) # 第二步:前端传了哪个条件,就增加哪个条件 if student_no: # 学号使用精确查询 query = query.filter(Student.student_no == student_no) if student_name: # 姓名使用模糊查询,例如“张”可以查到“张三” query = query.filter(Student.student_name.like(f"%{student_name}%")) if class_id: # 班级 ID 使用精确查询 query = query.filter(Student.class_id == class_id) # 第三步:执行查询并返回全部结果 return query.all() #逻辑删除学生 def delete_student(student_id: int, db: Session): # 第一步:查询学生 student = get_student_by_id(student_id, db) if not student: return None try: # 第二步:不真正删除记录,只把删除标记改成 1 student.is_deleted = 1 # 第三步:提交修改 db.commit() return student except Exception as e: # 删除失败时回滚 db.rollback() print("删除学生失败:", e) return False