学生信息管理系统
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
from model.Score import Score
|
||||
from model.students import Student
|
||||
from sqlalchemy.orm import Session
|
||||
from scheme.Score import ScoreCreate,ScoreUpdate
|
||||
|
||||
class ScoreDAO:
|
||||
"""用户数据访问对象,所有方法均为静态方法,方便调用"""
|
||||
|
||||
@staticmethod
|
||||
def inspect_stu_id_unq(db:Session,stu_id:int):
|
||||
return db.query(Student).filter(Student.stu_id == stu_id,Student.is_deleted==0).first()
|
||||
|
||||
|
||||
# 查所有数据
|
||||
@staticmethod
|
||||
def get_all(db:Session,skip:int=0,limit:int=100):
|
||||
return db.query(Score).offset(skip).limit(limit).all()
|
||||
|
||||
# 查询单个数据
|
||||
@staticmethod
|
||||
def get_by_id(db:Session,stu_id:int,exam_id:int):
|
||||
return db.query(Score).filter(Score.stu_id == stu_id,Score.exam_id==exam_id).first()
|
||||
|
||||
# 添加数据
|
||||
@staticmethod
|
||||
def post_score(db:Session,score_create:ScoreCreate):
|
||||
# 将 Pydantic 模型转为字典,并解包构建 SQLAlchemy 模型实例
|
||||
db_score=Score(**score_create.model_dump())
|
||||
db.add(db_score) #添加到会话
|
||||
db.commit() #提交事务,此时会执行 INSERT,并自动填充自增字段
|
||||
db.refresh(db_score) #刷新对象,获取数据库生成的默认值(如 created_at)
|
||||
return db_score
|
||||
|
||||
# 更改数据
|
||||
@staticmethod
|
||||
def put_score(db:Session,score_id:int,exam_id:int,score_update:ScoreUpdate):
|
||||
db_score=ScoreDAO.get_by_id(db,score_id,exam_id)
|
||||
if not db_score:
|
||||
return None
|
||||
# 只更新客户端显式传入的字段(exclude_unset=True 排除未设置的字段)
|
||||
put_score_data = score_update.model_dump(exclude_unset=True)
|
||||
for k,v in put_score_data.items():
|
||||
setattr(db_score,k,v) # 动态设置属性
|
||||
db.commit()
|
||||
db.refresh(db_score)
|
||||
return db_score
|
||||
|
||||
# 删除
|
||||
@staticmethod
|
||||
def delete_score(db:Session,score_id:int,exam_id:int):
|
||||
db_score=ScoreDAO.get_by_id(db,score_id,exam_id)
|
||||
if not db_score:
|
||||
return False
|
||||
db.delete(db_score)
|
||||
db.commit()
|
||||
return True
|
||||
Reference in New Issue
Block a user