from models.student import Student from sqlalchemy.orm import Session from schemas.student import Gender #新建学生 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, page: int = 1, page_size: int = 10, gender: Gender = None, ): # 第一步:只查询没有被删除的学生 query = db.query(Student).filter(Student.is_deleted == 0) # 第二步:前端传了哪个条件,就增加哪个条件 if student_no: # 学号使用精确查询 query = query.filter(Student.student_no == student_no) if gender: #查询枚举性别 query = query.filter(Student.gender == gender) if student_name: # 姓名使用模糊查询,例如“张”可以查到“张三” query = query.filter(Student.student_name.like(f"%{student_name}%")) # 班级 ID 使用精确查询 if class_id is not None: query = query.filter(Student.class_id == class_id) # 分页之前统计符合条件的总条数 total = query.count() #默认按学生id排序 students = ( query .order_by(Student.id.desc()) .offset((page - 1) * page_size) .limit(page_size) .all() ) return total, students #逻辑删除学生 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