# dao/score_dao.py from sqlalchemy.orm import Session from model.score import Score from model.student import Student # 查 # 查一个学生所有成绩 def get_score(db: Session, student_id: int): return db.query(Score).filter( Score.student_id == student_id, Score.is_deleted == 0, ).order_by(Score.exam_seq.asc()).all() # 查某学生的某次成绩 def get_one_score(db: Session, student_id: int, exam_seq: int): return db.query(Score).filter( Score.student_id == student_id, Score.exam_seq == exam_seq, Score.is_deleted == 0, ).first() # 查不及格的 def get_warning(db: Session): return db.query(Score).filter( Score.is_warning == 1, Score.is_deleted == 0, ).all() # 录 # 录信息 def add_score(db: Session, student_id: int, exam_seq: int, score: float): stu = db.query(Student).filter(Student.id == student_id).first() if not stu: return None, "学生不存在" exists = get_one_score(db, student_id, exam_seq) if exists: return None, "该学生这次成绩已录过" new_score = Score( student_id=student_id, exam_seq=exam_seq, score=score, is_warning=1 if score < 60 else 0, is_deleted=0, ) db.add(new_score) db.commit() db.refresh(new_score) return new_score, None # 改 # 改成绩 def update_score(db: Session, student_id: int, exam_seq: int, new_score: float): obj = get_one_score(db, student_id, exam_seq) if not obj: return None, "成绩不存在或已删除" obj.score = new_score # 如果不及格 预警重置 obj.is_warning = 1 if new_score < 60 else 0 db.commit() db.refresh(obj) return obj, None # 逻辑删除 def delete_score(db: Session, student_id: int, exam_seq: int): # 把删除的学生0改成1 obj = get_one_score(db, student_id, exam_seq) if not obj: return None, "成绩不存在或已删除" # 0 → 1 obj.is_deleted = 1 db.commit() return obj, None