aaa
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# dao/score_dao.py
|
||||
# 本文件封装对学生成绩表的所有数据库操作(增、删、改、查)
|
||||
from fastapi import HTTPException
|
||||
from sqlalchemy import and_
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from model.student_score import Score
|
||||
from scheme.scores import ScoreCreate, ScoreUpdate
|
||||
|
||||
|
||||
class ScoreDAO:
|
||||
|
||||
# 根据学生id、考试次数查询有效成绩(flag=1)
|
||||
@staticmethod
|
||||
def get_by_id(db: Session, sid: int, exam_num: int):
|
||||
score = db.query(Score).filter(and_(Score.sid == sid, Score.exam_num == exam_num, Score.flag == 1)
|
||||
).first()
|
||||
if score:
|
||||
return score
|
||||
raise HTTPException(status_code=404, detail="学生分数不存在")
|
||||
|
||||
# 查询某个学生的所有考试成绩
|
||||
@staticmethod
|
||||
def get_by_student(db: Session, sid: int):
|
||||
return (db.query(Score)
|
||||
.filter(Score.sid == sid, Score.flag == 1).order_by(Score.exam_num).all())
|
||||
|
||||
# 录入成绩
|
||||
@staticmethod
|
||||
def create(db: Session, data: ScoreCreate):
|
||||
# 同一个学生同一次考试只能有一条有效成绩
|
||||
exist = db.query(Score).filter(and_(Score.sid == data.sid, Score.exam_num == data.exam_num, Score.flag == 1)).first()
|
||||
if exist:
|
||||
raise HTTPException(status_code=400,
|
||||
detail=f"学生 {data.sid} 第 {data.exam_num} 次成绩已存在,请使用修改接口")
|
||||
score = Score(sid=data.sid, exam_num=data.exam_num, score=data.score, flag=1)
|
||||
db.add(score)
|
||||
db.commit()
|
||||
db.refresh(score)
|
||||
return score
|
||||
|
||||
# 根据学生id和考试次数更新成绩
|
||||
@staticmethod
|
||||
def update(db: Session, sid: int, exam_num: int, score_data: ScoreUpdate):
|
||||
update_data = score_data.model_dump()
|
||||
db.query(Score) \
|
||||
.filter(Score.sid == sid) \
|
||||
.update(update_data)
|
||||
db.commit() # 提交事务
|
||||
return ScoreDAO.get_by_id(db, sid, exam_num)
|
||||
|
||||
# 根据学生id和考试次数逻辑删除(flag 改为 0)
|
||||
@staticmethod
|
||||
def delete(db: Session, sid: int, exam_num: int):
|
||||
db_score = ScoreDAO.get_by_id(db, sid, exam_num)
|
||||
db_score.flag = 0 # 标记为已删除
|
||||
db.commit()
|
||||
db.refresh(db_score)
|
||||
return db_score
|
||||
Reference in New Issue
Block a user