From dccc0b609259b1c5d8497465100ac6a2a4e140bf Mon Sep 17 00:00:00 2001 From: 00MSJ1122 <1253313142@qq.com> Date: Tue, 22 Sep 2026 10:39:41 +0800 Subject: [PATCH 1/3] 1 --- PythonProject/api/student_api.py | 4 ++-- PythonProject/dao/student_dao.py | 6 ++++-- PythonProject/schema/student_schema.py | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/PythonProject/api/student_api.py b/PythonProject/api/student_api.py index 7b6e939..981de80 100644 --- a/PythonProject/api/student_api.py +++ b/PythonProject/api/student_api.py @@ -44,7 +44,7 @@ def del_students(stu_id:int ,db=Depends(get_db)): rows=delete_student_dao( stu_id=stu_id,db=db ) if not rows: - raise HTTPException(status_code=500,detail='没有删除') + raise HTTPException(status_code=404,detail='对象已被删除') return {'code':200,'totals':rows,'detail':'删除成功'} @StudentAPI.post('/students',tags=['学⽣基本信息管理模块'],response_model=StugetResponse,summary='学生信息新增接口',description='新增学生信息') @@ -53,5 +53,5 @@ def add_students(s:StudentRequest d=s.model_dump(exclude_unset=True) stu_new=add_student_dao(o=d,db=db) if not stu_new: - raise HTTPException(status_code=500,detail='添加失败') + raise HTTPException(status_code=404,detail='添加失败') return stu_new diff --git a/PythonProject/dao/student_dao.py b/PythonProject/dao/student_dao.py index d5cd939..9f755ac 100644 --- a/PythonProject/dao/student_dao.py +++ b/PythonProject/dao/student_dao.py @@ -28,12 +28,14 @@ def delete_student_dao(stu_id,db): def update_student_dao(stu_id,update_data,db): try: - rows = db.query( Student_Model ).filter( Student_Model.stu_id == stu_id,Student_Model.delete_status == 0).update( update_data ) + rows = (db.query( Student_Model ) + .filter( Student_Model.stu_id == stu_id,Student_Model.delete_status == 0) + .update( update_data )) + db.commit() except: db.rollback() return False else: - db.commit() return rows def get_student_dao(stu_id:Optional[int] diff --git a/PythonProject/schema/student_schema.py b/PythonProject/schema/student_schema.py index 494672b..58894ec 100644 --- a/PythonProject/schema/student_schema.py +++ b/PythonProject/schema/student_schema.py @@ -52,6 +52,7 @@ class StugetResponse(BaseModel): model_config = ConfigDict(from_attributes=True) code:int = 200 detail:str = 'ok' + stu_id:int | None = None class_id: int | None = None stu_name: str | None = None age: int | None = None From 59f81833a30475063c6dc686a14449893f138260 Mon Sep 17 00:00:00 2001 From: wolin_chenyulin001 <123@163.com> Date: Tue, 22 Sep 2026 10:41:26 +0800 Subject: [PATCH 2/3] api,dao --- PythonProject/api/employment_api.py | 17 +++------- PythonProject/dao/employment_dao.py | 26 +++++++++----- PythonProject/schema/employment_schema.py | 41 +++++++++-------------- 3 files changed, 39 insertions(+), 45 deletions(-) diff --git a/PythonProject/api/employment_api.py b/PythonProject/api/employment_api.py index 9db9cff..783ca98 100644 --- a/PythonProject/api/employment_api.py +++ b/PythonProject/api/employment_api.py @@ -1,8 +1,6 @@ -from fastapi import APIRouter, Query, Depends, HTTPException, Path -from util.database import get_db - +from fastapi import APIRouter, Query, Depends, HTTPException, Path,Form from dao import employment_dao -from dao.employment_dao import get_emp_dao, add_emp_dao, check_stu_dao, update_emp_dao, delete_emp_dao +from dao.employment_dao import add_emp_dao, update_emp_dao, delete_emp_dao from schema.employment_schema import EmploymentRequest,EmploymentResponse from util.database import get_db from typing import Optional @@ -18,19 +16,14 @@ def get_emp_info1(stu_id: Optional[int]=Path(description='学生编号') raise HTTPException(status_code=404, detail='该学生就业信息不存在') @emp_api.get('/employment/class/{class_id}',response_model=EmploymentResponse,summary='获取班级学生就业信息') -def get_emp_info2(class_id: Optional[int],db=Depends(get_db)): +def get_emp_info2(class_id: Optional[int]=Path(description='班级编号') + ,db=Depends(get_db)): if class_id: return employment_dao.get_emp_dao(class_id=class_id,db=db) raise HTTPException(status_code=404, detail='该班级就业信息不存在') @emp_api.post('/employment/students/{stu_id}',response_model=EmploymentResponse,summary='新增学生就业信息') -def create_emp_info(stu_id:int,emp:EmploymentRequest,db=Depends(get_db)): - if not check_stu_dao(stu_id,db): - raise HTTPException(status_code=404, detail='该学生不存在,无法添加就业信息') - emp.stu_id = stu_id - exist = db.query(employment_dao.Employment_info).filter(employment_dao.Employment_info.stu_id == stu_id,employment_dao.Employment_info.delete_status == 0).first() - if exist: - raise HTTPException(status_code=409,detail='该学生已有就业信息,请勿重复增加!') +def create_emp_info(emp:EmploymentRequest=Form(),db=Depends(get_db)): d=emp.model_dump(exclude_unset=False) r=add_emp_dao(d,db) if not r: diff --git a/PythonProject/dao/employment_dao.py b/PythonProject/dao/employment_dao.py index 5ce81a0..cd3fe5c 100644 --- a/PythonProject/dao/employment_dao.py +++ b/PythonProject/dao/employment_dao.py @@ -1,7 +1,8 @@ -from fastapi import HTTPException +from fastapi import HTTPException, APIRouter from model.all_model import Employment_info, ClassManagement, Student_Model +from datetime import datetime - +emp_api = APIRouter() def get_emp_dao(stu_id=None,class_id=None,company_name=None,min_salary=None,max_salary=None,db=None): try: q = db.query(Employment_info).\ @@ -41,18 +42,25 @@ def get_emp_dao(stu_id=None,class_id=None,company_name=None,min_salary=None,max_ def add_emp_dao(o,db): try: + stu = db.query(Student_Model).filter(Student_Model.stu_id == o['stu_id'], Student_Model.delete_status == 0).first() + if not stu: + raise HTTPException(status_code=404, detail='该学生不存在,无法添加就业信息') + + exist = db.query(Employment_info).filter(Employment_info.stu_id == o['stu_id'], + Employment_info.delete_status == 0).first() + if exist: + raise HTTPException(status_code=409, detail='该学生已有就业信息,请勿重复增加!') + e1 = Employment_info(**o) db.add(e1) db.commit() - return e1 + return o + except HTTPException: + raise except Exception as e: db.rollback() raise HTTPException(status_code=500, detail=f'新增就业信息失败: {e}') -def check_stu_dao(stu_id,db): - stu = db.query(Student_Model).filter(Student_Model.stu_id == stu_id,Student_Model.delete_status == 0).first() - return stu - def update_emp_dao(stu_id,o,db): try: rows = db.query(Employment_info).filter(Employment_info.stu_id == stu_id,Employment_info.delete_status == 0).first() @@ -65,7 +73,9 @@ def update_emp_dao(stu_id,o,db): def delete_emp_dao(stu_id,db): try: - rows = db.query(Employment_info).filter(Employment_info.stu_id == stu_id,Employment_info.delete_status == 0).delete() + rows = db.query(Employment_info)\ + .filter(Employment_info.stu_id == stu_id,Employment_info.delete_status == 0)\ + .update({'delete_status':1,'delete_time': datetime.now()}) db.commit() except: db.rollback() diff --git a/PythonProject/schema/employment_schema.py b/PythonProject/schema/employment_schema.py index 28a6078..9bc9a26 100644 --- a/PythonProject/schema/employment_schema.py +++ b/PythonProject/schema/employment_schema.py @@ -5,36 +5,27 @@ from typing import Optional class EmploymentRequest(BaseModel): stu_id: int=Field(ge=1) - email: str|None - employment_opening_date:date - offer_issuance_date:date - company_name:str - company_address:str|None - salary:float - - @field_validator('stu_id') - @classmethod - def check_stu_id(cls,v): - if v <= 0: - raise ValueError('输入有误,学生ID必须大于0') - return v + email: str|None = None + employment_opening_date:date|None = None + offer_issuance_date:date|None = None + company_name:str|None = None + company_address:str|None = None + salary:float|None = None @model_validator(mode='after') def check_date(self): - if self.employment_opening_date > self.offer_issuance_date: - raise ValueError('offer下发日期不能早于就业开放日期') + if self.employment_opening_date and self.offer_issuance_date: + if self.employment_opening_date > self.offer_issuance_date: + raise ValueError('offer下发日期不能早于就业开放日期') return self class EmploymentResponse(BaseModel): code:int = 200 detail:str = 'OK' - emp_id:int - stu_id: int - stu_name:Optional[str] = None - class_id:int - email: str | None - employment_opening_date: date - offer_issuance_date: date - company_name: str - company_address: str | None - salary: float \ No newline at end of file + stu_id:int + email: str|None = None + employment_opening_date:date|None = None + offer_issuance_date:date|None = None + company_name:str|None = None + company_address:str|None = None + salary:float|None = None From 603fee7fd4bd5deb83e6c41e7f18208e3a94674b Mon Sep 17 00:00:00 2001 From: Windows <2209639385@qq.com> Date: Tue, 22 Sep 2026 10:49:05 +0800 Subject: [PATCH 3/3] nb --- PythonProject/api/grade_api.py | 4 ++-- PythonProject/dao/grade_dao.py | 10 ++++++---- PythonProject/schema/grade_schema.py | 15 +++++++-------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/PythonProject/api/grade_api.py b/PythonProject/api/grade_api.py index be2612f..0f87fc8 100644 --- a/PythonProject/api/grade_api.py +++ b/PythonProject/api/grade_api.py @@ -15,7 +15,7 @@ def get_grade(stu_id: int,db=Depends(get_db)): raise HTTPException(status_code=500,detail=f'数据库查询异常:{str(e)}') @gradeAPI.post('/grade',response_model=GradeResponse,summary='添加学生成绩') -def post_grade(o:GradeRequest=Form(),db=Depends(get_db)): +def post_grade(o:GradeRequest,db=Depends(get_db)): d=o.model_dump() r=add_grade_dao(g=d,db=db) if not r: @@ -25,7 +25,7 @@ def post_grade(o:GradeRequest=Form(),db=Depends(get_db)): @gradeAPI.put('/{score_id}',summary='成绩修改') def put_grade( score_id: int - ,o:GradeUpdate=Form() + ,o:GradeUpdate ,db=Depends(get_db) ): old_obj = get_score_by_id_dao(score_id=score_id, db=db) diff --git a/PythonProject/dao/grade_dao.py b/PythonProject/dao/grade_dao.py index 683ec95..358645e 100644 --- a/PythonProject/dao/grade_dao.py +++ b/PythonProject/dao/grade_dao.py @@ -7,13 +7,15 @@ from model.all_model import * # 根据id查询单条有效成绩 def get_score_by_id_dao(score_id:int, db): return db.query(WlScore).filter( - WlScore.id == score_id - ,WlScore.delete_status==1 + WlScore.score_id == score_id + ,WlScore.delete_status==0 ).first() # 根据stu_id+exam_order查重(新增、修改时校验重复) def get_score_by_stu_exam_order_dao(stu_id:str,exam_order:int,db): - return db.query(WlScore).filter(WlScore.stu_id==stu_id,WlScore.exam_order==exam_order,WlScore.delete_status==0).first() + return db.query(WlScore).filter(WlScore.stu_id==stu_id + ,WlScore.exam_order==exam_order + ,WlScore.delete_status==0).first() def get_grade_dao( stu_id:int , db): @@ -52,7 +54,7 @@ def delete_grade_dao(stu_id:int,db): rows = db.query(WlScore).filter( WlScore.stu_id == stu_id, WlScore.delete_status == 0 - ).update({'delete_status':1}) + ).update({'delete_status':1,'delete_time':datetime.now()}) except: db.rollback() return False diff --git a/PythonProject/schema/grade_schema.py b/PythonProject/schema/grade_schema.py index e3461ed..cb7cacc 100644 --- a/PythonProject/schema/grade_schema.py +++ b/PythonProject/schema/grade_schema.py @@ -1,21 +1,20 @@ -from model.all_model import * -from pydantic import BaseModel, Field, field_validator -from fastapi import HTTPException,Form +from pydantic import BaseModel, Field class GradeRequest(BaseModel): - stu_id:int = Form(description="学生编号") - exam_order:int = Form(description='考核序次') - score:float = Form(description='成绩') + stu_id:int = Field(description="学生编号") + exam_order:int = Field(description='考核序次') + score:float = Field(description='成绩') class GradeResponse(BaseModel): code: int = 200 detail: str = 'OK' + score_id: float stu_id:int exam_order:int score:float class GradeUpdate(BaseModel): - exam_order: int | None = Form( description="考核序次") - score: float | None = Form( description="成绩") + exam_order: int | None = Field( None,description="考核序次") + score: float | None = Field( None,description="成绩")