Files
stu_system/dao/student_dao.py
T

105 lines
3.2 KiB
Python
Raw Normal View History

2026-09-21 17:39:16 +08:00
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} 已逻辑删除,数据仍保留在库中"}