105 lines
3.2 KiB
Python
105 lines
3.2 KiB
Python
|
|||
|
|
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} 已逻辑删除,数据仍保留在库中"}
|
||
|
|
|
||
|
|
|
||
|
|
|