From 483cc9cf28347f2fcaa028f7e6c85f989467cee4 Mon Sep 17 00:00:00 2001 From: Orangeeee Date: Wed, 23 Sep 2026 17:15:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E4=BD=93bug=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- class_management/api/class_management_api.py | 1 - class_management/dao/class_management_dao.py | 1 - class_management/database.py | 2 +- scores/api/score_api.py | 18 +++++--- scores/dao/score_dao.py | 46 ++++++++++++++++---- scores/schema/score_request.py | 8 ++-- 6 files changed, 53 insertions(+), 23 deletions(-) diff --git a/class_management/api/class_management_api.py b/class_management/api/class_management_api.py index bc448e2..f45e823 100644 --- a/class_management/api/class_management_api.py +++ b/class_management/api/class_management_api.py @@ -16,7 +16,6 @@ def add_class(cla:ClassCreate,db=Depends(get_db)): raise HTTPException(status_code=400,detail='新增失败,班级已存在') return ClassResponse(detail='新增成功',totals=1,data=c_dict) - #更新接口 @class_api.put("/{class_id}",summary='修改班级信息') def update_class(class_id:int diff --git a/class_management/dao/class_management_dao.py b/class_management/dao/class_management_dao.py index 4df3f09..28dac19 100644 --- a/class_management/dao/class_management_dao.py +++ b/class_management/dao/class_management_dao.py @@ -20,7 +20,6 @@ def add_class_dao(c,db): db.refresh(c1) return True - #更新班级信息 def update_class_dao(cid,update_data,db): try: diff --git a/class_management/database.py b/class_management/database.py index d546110..9551855 100644 --- a/class_management/database.py +++ b/class_management/database.py @@ -11,7 +11,7 @@ DB_HOST = os.getenv("DB_HOST", "localhost") DB_PORT = os.getenv("DB_PORT", "3306") DB_NAME = os.getenv("DB_NAME", "student_manage_system") -class_management_url = "mysql+pymysql://root:123456@localhost:3306/student_manage_system?charset=utf8mb4" +class_management_url = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8mb4" engine = create_engine(class_management_url) SessionLocal = sessionmaker(bind=engine,autocommit=False, autoflush=False) diff --git a/scores/api/score_api.py b/scores/api/score_api.py index 02aaf1a..1c61afc 100644 --- a/scores/api/score_api.py +++ b/scores/api/score_api.py @@ -14,15 +14,19 @@ def get_scores(score:ScoreQuery=Depends(),db=Depends(get_db)): return aa raise HTTPException(status_code=404,detail='不存在') -@score_api.post('/Score',response_model=ScoreResponse +@score_api.post('/Score' ,summary='成绩添加') def add_scores(score:ScoreRequest=Depends(),db=Depends(get_db)): - a = score.model_dump() - # print(a,type(a)) - aa = add_scores_dao(b=a,db=db) - if aa: - return ScoreResponse(data=a) - raise HTTPException(status_code=500,detail='不可以') + # try: + a = score.model_dump() + # print(a,type(a)) + aa = add_scores_dao(b=a,db=db) + if aa: + return aa + # except ValueError as e: + # raise HTTPException(status_code=400, detail="数据库已有该成绩") + # except Exception as e: + # raise HTTPException(status_code=500, detail="数据库错误") @score_api.put('/Score',summary='成绩更新',description=f'查询条件为学号,班级号,考试序次,考试科目,然后更改这位同学此次科目的成绩') def update_scores(score:ScoreRequest,sid:int,cid:int,num:int,t_subject:int,db=Depends(get_db)): diff --git a/scores/dao/score_dao.py b/scores/dao/score_dao.py index 1f499cf..4e4717f 100644 --- a/scores/dao/score_dao.py +++ b/scores/dao/score_dao.py @@ -1,3 +1,5 @@ +from zipfile import sizeCentralDir + from scores.model.score_model import Score from datetime import datetime @@ -28,19 +30,45 @@ def get_scores_dao(s,db): def add_scores_dao(b,db): try: - aa = db.query(Score).filter(Score.t_subject==b['t_subject']).all() + aa = db.query(Score).filter(Score.sid == b['sid'] + ,Score.cid == b['cid'] + ,Score.t_subject == b['t_subject'] + ,Score.is_deleted == 0 + ).first() if aa: raise ValueError - else: - z = Score(**b) - db.add(z) + + deleted = db.query(Score).filter( + Score.sid == b['sid'], + Score.cid == b['cid'], + Score.t_subject == b['t_subject'], + Score.is_deleted == 1 + ).first() + + if deleted.is_deleted and deleted.is_deleted == True: + deleted.sid = b['sid'] + deleted.cid = b['cid'] + deleted.num = b['num'] + deleted.score = b['score'] + deleted.t_subject = b['t_subject'] + + deleted.create_date = datetime.now() + deleted.update_date = datetime.now() + deleted.is_deleted = False + deleted.deleted_date = None + db.commit() + db.refresh(deleted) # 从数据库再拉一次数据 + return b + z = Score(**b) + db.add(z) + db.commit() + db.refresh(z) + return z except Exception as e: db.rollback() - print(e) - return False - else: - db.commit() - return True + # print(e) + raise e + def update_scores_dao(sid:int,cid:int,num:int,t_subject:int,update_data:dict,db): if not update_data: diff --git a/scores/schema/score_request.py b/scores/schema/score_request.py index c438838..c6e57b4 100644 --- a/scores/schema/score_request.py +++ b/scores/schema/score_request.py @@ -1,12 +1,12 @@ -from pydantic import BaseModel +from pydantic import BaseModel,Field class ScoreRequest(BaseModel): # id:int - sid:int - cid:int + sid:int = Field(ge=1, le=20, description="学生ID:1-20") + cid:int = Field(ge=1, le=8, description="班级ID:1-8") num:int score:int - t_subject:int + t_subject:int = Field(ge=1, le=6, description="科目ID:1-6") class ScoreQuery(BaseModel): id:int|None = None