Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52452e378c | ||
|
|
4f90c6a5c3 | ||
|
|
1be706c267 | ||
|
|
9c24a229c7 | ||
|
|
c1deb9f545 | ||
|
|
fd3e52f4ff | ||
|
|
1933466e3d | ||
|
|
9a0f2d533a | ||
|
|
2807c30683 |
+1
-1
@@ -51,6 +51,6 @@ def get_classes( id:int|None = None # id参数接收前端输
|
||||
@classes_router.delete('/{id}',response_model=ClassResponse,summary='删除班级信息') # delete删除请求,指定返回数据格式为 ClassResponse
|
||||
def delete_classes(id:int,db=Depends(get_db)): # 定义删除接口函数,id参数接收前端输入的数据,参数db依赖于数据库会话的上下文管理器
|
||||
r = delete_classes_dao( id , db ) # 变量r用来接收dao层delete_classes_dao函数的返回值,执行函数时以以前端输入的id 数据、db依赖函数入参
|
||||
if r : # 判断 DAO 层的返回结果,如果是True
|
||||
if r!=0 : # 判断 DAO 层的返回结果,如果是True
|
||||
return ClassResponse( total=1,data='已成功删除班级信息' ) # 返回成功响应和提示给前端 # 如果是False
|
||||
raise HTTPException(status_code=500, detail='删除失败,该班级信息已不存在或服务器繁忙,请稍后更新!') # 如果为False,抛出 500 内部服务器错误 和提示
|
||||
+1
-9
@@ -1,7 +1,7 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from sqlalchemy.orm import Session
|
||||
from core.database import get_db
|
||||
from dao.score import post_score_dao, update_score_dao, get_score_dao, get_all_scores_dao,delete_score_dao, exist_student_exam_dao
|
||||
from dao.score import post_score_dao, update_score_dao, get_score_dao,delete_score_dao, exist_student_exam_dao
|
||||
from schemas.score import ScoreCreate, ScoreUpdate, ScorePageResp
|
||||
|
||||
scores_router = APIRouter(prefix="/scores", tags=["成绩接口"])
|
||||
@@ -32,14 +32,6 @@ def list_score(
|
||||
|
||||
|
||||
|
||||
@scores_router.get("/all", response_model=ScorePageResp,
|
||||
summary="所有学生成绩接口",
|
||||
)
|
||||
def list_all_scores(page: int = Query(1, ge=1),
|
||||
page_size: int = Query(10, ge=1, le=100),
|
||||
db: Session = Depends(get_db)):
|
||||
total, data_list = get_all_scores_dao(page, page_size, db)
|
||||
return {"total": total, "data": data_list}
|
||||
|
||||
@scores_router.put("{score_id}", summary="更新成绩接口")
|
||||
def modify_score(score_id: int, req: ScoreUpdate, db: Session = Depends(get_db)):
|
||||
|
||||
+4
-4
@@ -73,10 +73,10 @@ def get_classes_dao( class_id, class_no , class_name , page , page_size , db ):
|
||||
# ————定义班级表"删除"信息的函数————
|
||||
def delete_classes_dao( class_id , db ): # 定义函数,设置两个个形参class_id,db
|
||||
try : # 执行以下可能报错的代码
|
||||
db.query( Classes ).filter( Classes.id == class_id , Classes.is_deleted == 0 ).update( {"is_deleted": 1} ) # 将未删除且前端输入的id和数据库id可以匹配上的数据更新is_deleted字段为1,表示已逻辑删除
|
||||
r = db.query( Classes ).filter( Classes.id == class_id , Classes.is_deleted == 0 ).update( {"is_deleted": 1} ) # 将未删除且前端输入的id和数据库id可以匹配上的数据更新is_deleted字段为1,表示已逻辑删除
|
||||
if r !=0:
|
||||
db.commit()
|
||||
return r
|
||||
except : # 捕获异常:
|
||||
db.rollback() # 如果中间出错,回滚事务,防止产生脏数据
|
||||
return False # 返回 False,返回接口,表示操作失败
|
||||
else : # 执行成功:
|
||||
db.commit() # 提交事务:更新is_deleted字段为1,表示已逻辑删除,前端无法查询到已逻辑删除的数据
|
||||
return True # 返回 True,返回接口,表示操作成功
|
||||
|
||||
+32
-33
@@ -5,23 +5,27 @@ def post_score_dao(data_dict, db):
|
||||
try:
|
||||
obj = Score(**data_dict)
|
||||
db.add(obj)
|
||||
db.commit()
|
||||
except Exception as e:
|
||||
print("新增成绩异常:", e)
|
||||
db.rollback()
|
||||
return False
|
||||
else:
|
||||
db.commit()
|
||||
return True
|
||||
|
||||
|
||||
def update_score_dao(score_id, db, updates):
|
||||
"""修改成绩,query.update方式"""
|
||||
try:
|
||||
db.query(Score).filter(
|
||||
cnt = db.query(Score).filter(
|
||||
Score.id == score_id,
|
||||
Score.is_deleted == 0
|
||||
).update(updates)
|
||||
except Exception:
|
||||
if cnt == 0:
|
||||
db.rollback()
|
||||
return False
|
||||
except Exception as e:
|
||||
print("修改成绩异常:", e)
|
||||
db.rollback()
|
||||
return False
|
||||
else:
|
||||
@@ -30,14 +34,25 @@ def update_score_dao(score_id, db, updates):
|
||||
|
||||
|
||||
def get_score_dao(score_id, student_id, exam_seq, page, page_size, db):
|
||||
"""分页查询成绩,多条件过滤,只查未删除"""
|
||||
"""分页查询成绩,多条件过滤,只查未删除
|
||||
规则:
|
||||
- score_id == 0 → 查所有学生成绩(仅分页,不加 id 过滤)
|
||||
- 三个筛选条件全为空(None) → 直接返回空,不查库
|
||||
- 其他情况 → 按传入条件过滤
|
||||
"""
|
||||
q = db.query(Score).filter(Score.is_deleted == 0)
|
||||
if score_id:
|
||||
q = q.filter(Score.id == score_id)
|
||||
if student_id:
|
||||
q = q.filter(Score.student_id == student_id)
|
||||
if exam_seq:
|
||||
q = q.filter(Score.exam_seq == exam_seq)
|
||||
|
||||
if score_id == 0:
|
||||
pass # score_id=0 → 查全部(分页)
|
||||
elif score_id is None and not student_id and not exam_seq:
|
||||
return 0, [] # 三个参数都没传 → 返回空
|
||||
else:
|
||||
if score_id:
|
||||
q = q.filter(Score.id == score_id)
|
||||
if student_id:
|
||||
q = q.filter(Score.student_id == student_id)
|
||||
if exam_seq:
|
||||
q = q.filter(Score.exam_seq == exam_seq)
|
||||
|
||||
total = q.count()
|
||||
rows = q.offset((page - 1) * page_size).limit(page_size).all()
|
||||
@@ -58,36 +73,20 @@ def get_score_dao(score_id, student_id, exam_seq, page, page_size, db):
|
||||
]
|
||||
return total, res_list
|
||||
|
||||
def get_all_scores_dao(page, page_size, db):
|
||||
r = db.query(Score).filter(Score.is_deleted == 0)\
|
||||
.order_by(Score.student_id, Score.exam_seq)
|
||||
total = r.count() # 总条数
|
||||
rows = r.offset((page-1)*page_size).limit(page_size).all()# 分页
|
||||
res_list_all = [
|
||||
{
|
||||
"id": i.id,
|
||||
"student_id": i.student_id,
|
||||
"score": i.score,
|
||||
"exam_seq": i.exam_seq,
|
||||
"exam_date": i.exam_date,
|
||||
"remark": i.remark,
|
||||
"created_at": i.created_at,
|
||||
"updated_at": i.updated_at,
|
||||
"is_deleted": i.is_deleted
|
||||
}
|
||||
for i in rows
|
||||
]
|
||||
return total,res_list_all
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def delete_score_dao(score_id, db):
|
||||
"""逻辑删除,更新is_deleted=1"""
|
||||
try:
|
||||
db.query(Score).filter(
|
||||
cnt = db.query(Score).filter(
|
||||
Score.id == score_id,
|
||||
Score.is_deleted == 0
|
||||
).update({"is_deleted": 1})
|
||||
).update({"is_deleted": 1}) # ← 接住返回值
|
||||
if cnt == 0: # ← 关键:一行都没匹配到
|
||||
db.rollback()
|
||||
return False
|
||||
except Exception as err:
|
||||
print("删除成绩异常:", err)
|
||||
db.rollback()
|
||||
|
||||
@@ -5,7 +5,7 @@ from core.database import Base # 从core软件包下的database模块导入B
|
||||
from sqlalchemy.dialects.mysql import TINYINT
|
||||
|
||||
class Classes( Base ): # 在python里的名字
|
||||
__tablename__ = 'class_info_detail' # 在数据库中表的名字
|
||||
__tablename__ = 'class_info_detail' # 在数据库中表的名字
|
||||
#————创建班级"主键"的字段名————
|
||||
id = Column( Integer # 声明字段的数据类型是"整数"
|
||||
, primary_key = True # 声明是"主键"
|
||||
|
||||
@@ -8,7 +8,7 @@ from datetime import datetime,date # 导入datetime模块下的datetime,da
|
||||
class ClassCreate( BaseModel ): # "创建"班级信息的请求体模型
|
||||
class_no: str # 班级编号,不可为空
|
||||
class_name: str # 班级名字,不可为空
|
||||
start_date : date|None = None # 班级开课日期,可以为空,默认为空
|
||||
start_date : date # 班级开课日期,不可为空
|
||||
end_date : date|None = None # 班级结课日期,可以为空,默认为空
|
||||
remark : str|None = None # 班级备注,可以为空,默认为空
|
||||
|
||||
|
||||
Reference in New Issue
Block a user