删除了文档

This commit is contained in:
wolin_liyujie
2026-09-21 21:39:13 +08:00
parent 0b92b17283
commit 3577495b6c
3 changed files with 173 additions and 16 deletions
+83 -4
View File
@@ -1,17 +1,96 @@
from fastapi import APIRouter,Depends,HTTPException
from dao.student import *
from schemas.student import StudentCreate
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from core.database import get_db
from schemas.student import StudentCreate, StudentUpdate
from dao import student as student_dao
student_router = APIRouter()
@student_router.post("",summary='添加学生')
def create_student(request:StudentCreate,db:Session = Depends(get_db)):
d = request.model_dump()
r = create_students(d,db)
r = student_dao.create_students(d,db)
if not r:
raise HTTPException(status_code=500,detail='服务器繁忙,请稍后添加!')
return {'code':200,'detail':"添加学生成功"}
@student_router.put("/{id}", summary="修改学生")
def update_student(
id: int,
request: StudentUpdate,
db: Session = Depends(get_db),
):
# 只取前端真正传来的字段
# 例如只传 age,就只修改 age
data = request.model_dump(exclude_unset=True)
student = student_dao.update_student(id, data, db)
# None 表示学生不存在
if student is None:
raise HTTPException(status_code=404, detail="学生不存在")
# False 表示操作数据库失败
if student is False:
raise HTTPException(status_code=500, detail="修改学生失败")
return {
"code": 200,
"detail": "修改学生成功",
"data": student,
}
@student_router.get("", summary="查询学生列表")
def get_students(
# 三个查询条件都可以不传
student_no: str | None = None,
student_name: str | None = None,
class_id: int | None = None,
# 获取本次请求使用的数据库连接
db: Session = Depends(get_db),
):
# 调用 DAO 查询数据库
students = student_dao.get_students(
db=db,
student_no=student_no,
student_name=student_name,
class_id=class_id,
)
return {
"code": 200,
"detail": "查询成功",
"total": len(students),
"data": students,
}
@student_router.get("/{id}", summary="查询学生详情")
def get_student(id: int, db: Session = Depends(get_db)):
# 根据路径中的 ID 查询学生
student = student_dao.get_student_by_id(id, db)
if not student:
# 404 表示请求的数据不存在
raise HTTPException(status_code=404, detail="学生不存在")
return {
"code": 200,
"detail": "查询成功",
"data": student,
}
@student_router.delete("/{id}", summary="逻辑删除学生")
def delete_student(id: int, db: Session = Depends(get_db)):
student = student_dao.delete_student(id, db)
# None 表示不存在,或者以前已经删除
if student is None:
raise HTTPException(status_code=404, detail="学生不存在或已经删除")
if student is False:
raise HTTPException(status_code=500, detail="删除学生失败")
return {
"code": 200,
"detail": "删除学生成功",
}
+79 -1
View File
@@ -22,4 +22,82 @@ def create_students(d: dict, db: Session):
print(f"插入学生失败: {e}")
return None
# def updet_students():
def get_student_by_id(student_id: int, db: Session):
# 同时判断 is_deleted,已经逻辑删除的学生不会被查到
return db.query(Student).filter(
Student.id == student_id,
Student.is_deleted == 0,
).first()
def update_student(student_id: int, data: dict, db: Session):
# 第一步:先查询学生
student = get_student_by_id(student_id, db)
# 没有查到就返回 None
if not student:
return None
try:
# 第二步:循环修改前端传来的字段
# field 是字段名,value 是新的值
for field, value in data.items():
setattr(student, field, value)
# 第三步:提交修改并重新读取数据
db.commit()
db.refresh(student)
return student
except Exception as e:
# 修改失败时回滚
db.rollback()
print("修改学生失败:", e)
return False
def get_students(
db: Session,
student_no: str | None = None,
student_name: str | None = None,
class_id: int | None = None,
):
# 第一步:只查询没有被删除的学生
query = db.query(Student).filter(Student.is_deleted == 0)
# 第二步:前端传了哪个条件,就增加哪个条件
if student_no:
# 学号使用精确查询
query = query.filter(Student.student_no == student_no)
if student_name:
# 姓名使用模糊查询,例如“张”可以查到“张三”
query = query.filter(Student.student_name.like(f"%{student_name}%"))
if class_id:
# 班级 ID 使用精确查询
query = query.filter(Student.class_id == class_id)
# 第三步:执行查询并返回全部结果
return query.all()
#逻辑删除学生
def delete_student(student_id: int, db: Session):
# 第一步:查询学生
student = get_student_by_id(student_id, db)
if not student:
return None
try:
# 第二步:不真正删除记录,只把删除标记改成 1
student.is_deleted = 1
# 第三步:提交修改
db.commit()
return student
except Exception as e:
# 删除失败时回滚
db.rollback()
print("删除学生失败:", e)
return False
+11 -11
View File
@@ -24,17 +24,17 @@ class StudentCreate(BaseModel):
return self
class StudentUpdate(BaseModel):
# 1. 默认值为 None 是为了允许省略字段,不代表每个字段都能清空。
student_no: str | None = Field(default=None, min_length=1, max_length=50)
student_name: str | None = Field(default=None, min_length=1, max_length=50)
class_id: int | None = Field(default=None, gt=0)
consultant_id: int | None = Field(default=None, gt=0)
native_place: str | None = Field(default=None, max_length=100)
graduation_school: str | None = Field(default=None, max_length=100)
major: str | None = Field(default=None, max_length=100)
# 全部设为可选,前端只传需要修改的字段
student_no: str | None = None
student_name: str | None = None
class_id: int | None = None
consultant_id: int | None = None
native_place: str | None = None
graduation_school: str | None = None
major: str | None = None
enrollment_date: date | None = None
graduation_date: date | None = None
education: str | None = Field(default=None, max_length=50)
age: int | None = Field(default=None, ge=0, le=150)
gender: str | None = Field(default=None, min_length=1, max_length=10)
education: str | None = None
age: int | None = None
gender: str | None = None