diff --git a/dao/student_dao.py b/dao/stu_dao.py similarity index 98% rename from dao/student_dao.py rename to dao/stu_dao.py index 366ad79..a906be6 100644 --- a/dao/student_dao.py +++ b/dao/stu_dao.py @@ -1,57 +1,57 @@ -from sqlalchemy.orm import Session -from model.student_model import Student -from schema.student_schema import StudentCreateRequest,StudentUpdateRequest -def create_student(db: Session, student_create: StudentCreateRequest): - """ - 新增学生 - : db: 数据库会话 - :student_c reate: 前端传来的新增请求体 - """ - db_student = Student(**student_create.model_dump())#请求体转为字典,再解包创建实体对象 - db.add(db_student)#添加 - db.commit()#提交事务 - new_student=db.query(Student).filter( - Student.stu_id==student_create.stu_id, - Student.is_deleted==False).first() - #查询 Student 表,取第一条,没有则返回 None - return new_student -def get_student_by_id(db: Session, stu_id: int):#根据stu_id查询单个学生 - query = db.query(Student).filter( - Student.stu_id == stu_id, - Student.is_deleted == False) - return query.first() -def get_student_list(db: Session, stu_id:None, - class_id:str=None, page:int=1, page_size:int=10, stu_name:str=None):#查询学生列表,支持按照编号/姓名/班级删选 - # 基础查询:只查未逻辑删除的学生 - query = db.query(Student).filter(Student.is_deleted == False) - if stu_id: - query = query.filter(Student.stu_id == stu_id) - if stu_name: - query = query.filter(Student.stu_name == stu_name) - if class_id: - query = query.filter(Student.class_id == class_id) - total = query.count()#统计满足条件的记录 - offset = (page - 1) * page_size# 计算分页偏移量:跳过前面 (page-1)*page_size 条 - db_student_list = query.offset(offset).limit(page_size).all()# 执行分页查询:跳过offset条,取page_size条 - return total, db_student_list -def update_student(db: Session, stu_id:int,student_update: StudentUpdateRequest): - """修改学生信息 -db: 数据库会话stu_id: 要修改的学生主键student_update: 前端传来的修改请求体: -""" - db_student = get_student_by_id(db=db,stu_id=stu_id) - if not db_student: - return None#先查学生,查不到报错 - update_data=student_update.model_dump(exclude_unset=True)#只解析前端输入的键值对,默认值不会解析 - for k,v in update_data.items(): - setattr(db_student,k,v)#把 value 赋给 db_student 的 key 属性。 - db.commit() - updated_student=get_student_by_id(db, stu_id) - return updated_student -def delete_student_logic(db: Session, stu_id:int): - db_student = get_student_by_id(db, stu_id) - if not db_student: - return None - db_student.is_deleted = True#把逻辑删除标记改成True - db.commit()#重新查询,返回标记已删除的这条记录 - deleted_student = db.query(Student).filter(Student.stu_id == stu_id).first() - return deleted_student +from sqlalchemy.orm import Session +from model.student_model import Student +from schema.student_schema import StudentCreateRequest,StudentUpdateRequest +def create_student(db: Session, student_create: StudentCreateRequest): + """ + 新增学生 + : db: 数据库会话 + :student_c reate: 前端传来的新增请求体 + """ + db_student = Student(**student_create.model_dump())#请求体转为字典,再解包创建实体对象 + db.add(db_student)#添加 + db.commit()#提交事务 + new_student=db.query(Student).filter( + Student.stu_id==student_create.stu_id, + Student.is_deleted==False).first() + #查询 Student 表,取第一条,没有则返回 None + return new_student +def get_student_by_id(db: Session, stu_id: int):#根据stu_id查询单个学生 + query = db.query(Student).filter( + Student.stu_id == stu_id, + Student.is_deleted == False) + return query.first() +def get_student_list(db: Session, stu_id:None, + class_id:str=None, page:int=1, page_size:int=10, stu_name:str=None):#查询学生列表,支持按照编号/姓名/班级删选 + # 基础查询:只查未逻辑删除的学生 + query = db.query(Student).filter(Student.is_deleted == False) + if stu_id: + query = query.filter(Student.stu_id == stu_id) + if stu_name: + query = query.filter(Student.stu_name == stu_name) + if class_id: + query = query.filter(Student.class_id == class_id) + total = query.count()#统计满足条件的记录 + offset = (page - 1) * page_size# 计算分页偏移量:跳过前面 (page-1)*page_size 条 + db_student_list = query.offset(offset).limit(page_size).all()# 执行分页查询:跳过offset条,取page_size条 + return total, db_student_list +def update_student(db: Session, stu_id:int,student_update: StudentUpdateRequest): + """修改学生信息 +db: 数据库会话stu_id: 要修改的学生主键student_update: 前端传来的修改请求体: +""" + db_student = get_student_by_id(db=db,stu_id=stu_id) + if not db_student: + return None#先查学生,查不到报错 + update_data=student_update.model_dump(exclude_unset=True)#只解析前端输入的键值对,默认值不会解析 + for k,v in update_data.items(): + setattr(db_student,k,v)#把 value 赋给 db_student 的 key 属性。 + db.commit() + updated_student=get_student_by_id(db, stu_id) + return updated_student +def delete_student_logic(db: Session, stu_id:int): + db_student = get_student_by_id(db, stu_id) + if not db_student: + return None + db_student.is_deleted = True#把逻辑删除标记改成True + db.commit()#重新查询,返回标记已删除的这条记录 + deleted_student = db.query(Student).filter(Student.stu_id == stu_id).first() + return deleted_student