from sqlalchemy.orm import Session from model.student_info import Student from schemas.student_info import StudentCreate, StudentUpdate,StudentDate, StudentResponse #查询 查询学生信息(按编号、姓名、班级条件筛选) #orm动态查询 def list_students(db: Session,id: str = None,name: str = None,class_name: str = None): # 已逻辑删除的学生 query = db.query(Student).filter(Student.is_deleted == False) # 查询学生信息(支持按编号、姓名、班级等条件筛选)。 if id: query = query.filter(Student.id == id) if name: query = query.filter(Student.name.like(f"%{name}%")) if class_name: query = query.filter(Student.class_name == class_name) # 执行查询并返回 return query.all() #2创建新的学生 def create_student(db: Session,student: StudentCreate): data = {} #遍历 for field_name in student.model_fields: if field_name == "id": val = student.id elif field_name == "name": val = student.name elif field_name == "gender": val = student.gender elif field_name == "class_no": val = student.class_name elif field_name == "major": val = student.major elif field_name == "age": val = student.age elif field_name == "hometown": val = student.hometown else: val = None data[field_name] = val # 赋值给ORM db_student = Student( id=data["id"], name=data["name"], gender=data["gender"], class_name=data["class_name"], major=data.get("major"), age=data.get("age"), hometown=data.get("hometown") ) db.add(db_student) db.commit() db.refresh(db_student) return db_student # 获取特定学生信息 # 严格按照需求文档:GET /students/{id},从URL路径中获取学生学号 def get_student(db: Session,id: str): # 查询:id字段等于url传过来的id student = db.query(Student).filter(Student.id == id,).first() if student is None: return None return student # 更新学生信息 /students/{id} id为学号 def update_student( db: Session,id: str, payload: StudentUpdate): # 根据学号查询学生 student = db.query(Student).filter(Student.id == id).first() # 学生是否存在 if student is None: return None if payload.name is not None: student.name = payload.name if payload.age is not None: student.age = payload.age if payload.class_name is not None: student.class_name = payload.class_name # 保存到数据库 db.commit() db.refresh(student) # 返回更新后的学生 return student # 逻辑删除学生。逻辑上删除,实际上未删除 def delete_student(db: Session,id: str): # 根据学号查询 student = db.query(Student).filter(Student.id == id, Student.is_deleted == False).first() # 判断学生是否存在 if student is None: return None # 逻辑删除:把is_deleted改成True,不是真的删掉这条记录 student.is_deleted = True db.commit() return {"message": f"学生 {id} 已逻辑删除,数据仍保留在库中"}