更新 dao/stu_dao.py

This commit is contained in:
2026-09-22 15:30:42 +08:00
parent fe03827aa3
commit 7cc06e6015
+57 -57
View File
@@ -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