Files
DoubaoTeam/dao/score.py
T
2026-09-21 21:55:04 +08:00

86 lines
2.3 KiB
Python

from sqlalchemy import DECIMAL
from models.score import Score
def post_score_dao(data_dict, db):
"""新增成绩"""
try:
obj = Score(**data_dict)
db.add(obj)
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(
Score.id == score_id,
Score.is_deleted == 0
).update(updates)
except Exception:
db.rollback()
return False
else:
db.commit()
return True
def get_score_dao(score_id, student_id, exam_seq, page, page_size, db):
"""分页查询成绩,多条件过滤,只查未删除"""
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)
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):
"""逻辑删除,更新is_deleted=1"""
try:
db.query(Score).filter(
Score.id == score_id,
Score.is_deleted == 0
).update({"is_deleted": 1})
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