from models.score import Score 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: return True def update_score_dao(score_id, db, updates): """修改成绩,query.update方式""" try: cnt = db.query(Score).filter( Score.id == score_id, Score.is_deleted == 0 ).update(updates) if cnt == 0: db.rollback() return False except Exception as e: print("修改成绩异常:", e) db.rollback() return False else: db.commit() return True 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 == 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() res_list = [ { "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 def delete_score_dao(score_id, db): try: cnt = db.query(Score).filter( Score.id == score_id, Score.is_deleted == 0 ).update({"is_deleted": 1}) # ← 接住返回值 if cnt == 0: # ← 关键:一行都没匹配到 db.rollback() return False except Exception as err: print("删除成绩异常:", err) db.rollback() return False else: db.commit() return True def exist_student_exam_dao(student_id, exam_seq, db): """校验:同一个学生+考试序次是否已经存在,用于联合唯一业务判断""" rec = db.query(Score).filter( Score.student_id == student_id, Score.exam_seq == exam_seq, Score.is_deleted == 0 ).first() return rec is not None