From acf5eb14414285ca9843af07ba228d93e9f5acda Mon Sep 17 00:00:00 2001 From: yb <739325183@qq.com> Date: Mon, 21 Sep 2026 17:05:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stu_jiuye/CURD_api.py | 72 ++++++++++++++++++---------------- stu_jiuye/dao.py | 91 ++++++++++++++++++++++--------------------- stu_jiuye/model.py | 44 +++++++++++---------- stu_jiuye/request.py | 13 +++---- 4 files changed, 115 insertions(+), 105 deletions(-) diff --git a/stu_jiuye/CURD_api.py b/stu_jiuye/CURD_api.py index f895d9a..2698fb6 100644 --- a/stu_jiuye/CURD_api.py +++ b/stu_jiuye/CURD_api.py @@ -8,71 +8,77 @@ CURD=APIRouter() @CURD.get('/emp',tags=['查询就业信息']) -def get_stuinfo( +def get_stuinfo( #查询学生就业信息 stuname:str| None = None ,compname:str|None=None ,min_salary:int=0 ,max_salary:int|None=None ,db=Depends(get_db) - ): - r=get_emp_dao( + ): #查询条件 + r=get_emp_dao( #调用函数 stuname, compname, db, min_salary, - max_salary) + max_salary + ) if r: - return r - raise HTTPException(status_code=404, detail='名单不存在!') + return r #成功返回 + raise HTTPException(status_code=404, detail='名单不存在!') #失败返回错误信息 @CURD.post('/emp',response_model=EmpResponse,tags=['新增就业信息']) -def add_stuinfo( +def add_stuinfo( #新增学生就业信息 p:PostRequest,db=Depends(get_db) - ): - d=p.model_dump() - r=add_employment_dao(o=d,db=db) + ): #调用请求体 + d=p.model_dump() #解析成字典 + r=add_employment_dao(o=d,db=db) #调用函数 if not r: - raise HTTPException(status_code=500, detail='服务器繁忙,请稍后添加!') - return EmpResponse(totals=1, data=d) + raise HTTPException(status_code=500, detail='服务器繁忙,请稍后添加!') #失败返回错误 + return EmpResponse(totals=1, data=d) #成功返回响应体 @CURD.post('/emp/company',response_model=CompResponse,tags=['新增公司信息']) -def add_company(c:CompRequest,db=Depends(get_db)): - d = c.model_dump() - r = add_company_dao(o=d, db=db) +def add_company( #新增公司表信息 + c:CompRequest,db=Depends(get_db) + ): + d = c.model_dump() #解析 + r = add_company_dao(o=d, db=db) #调用添加公司函数 if not r: - raise HTTPException(status_code=500, detail='服务器繁忙,请稍后添加!') - return CompResponse(totals=1, data=d) + raise HTTPException(status_code=500, detail='服务器繁忙,请稍后添加!') #失败返回错误信息 + return CompResponse(totals=1, data=d) #成功返回响应体 @CURD.post('/emp/company/address',response_model=AddResponse,tags=['新增公司所在区域']) -def add_address( +def add_address( #新增公司地址区域信息 add:AddRequest,db=Depends(get_db) ): - d = add.model_dump() - r = add_address_dao(o=d, db=db) + d = add.model_dump() #解析 + r = add_address_dao(o=d, db=db) #调用添加地址函数 if not r: - raise HTTPException(status_code=500, detail='服务器繁忙,请稍后添加!') - return AddResponse(totals=1, data=d) + raise HTTPException(status_code=500, detail='服务器繁忙,请稍后添加!') #失败返回错误信息 + return AddResponse(totals=1, data=d) #成功返回响应体 @CURD.put('/emp',tags=['更改就业信息']) -def updata_stuinfo(up:PostRequest +def updata_stuinfo( #更新数据模块 + up:PostRequest ,id:int ,db=Depends(get_db) - ): - d = up.model_dump(exclude_unset=True) - r = update_emp_dao(id=id, update_data=d, db=db) + ): #根据id选择对象 + d = up.model_dump(exclude_unset=True) #解析 + r = update_emp_dao(id=id, update_data=d, db=db) #调用更新函数 if not r: - raise HTTPException(status_code=500, detail='没有更新!') - return {'code': 200, 'totals': r, 'detail': '更新成功'} + raise HTTPException(status_code=500, detail='没有更新!') #失败返回错误信息 + return {'code': 200, 'totals': r, 'detail': '更新成功'} #成功返回信息 @CURD.delete('/emp/{id}',tags=['删除就业信息']) -def delete_stuinfo(id:int - ,db=Depends(get_db)): - rows = delete_emp_dao(id, db) +def delete_stuinfo( #删除模块 + id:int + ,db=Depends(get_db) + ): #根据id选择对象 + rows = delete_emp_dao(id, db) #调用删除函数 if not rows: - raise HTTPException(status_code=500, detail='没有删除!') - return {'code': 200, 'totals': rows, 'detail': '删除成功'} + raise HTTPException(status_code=500, detail='没有删除!') #失败返回错误信息 + return {'code': 200, 'totals': rows, 'detail': '删除成功'} #成功返回信息 diff --git a/stu_jiuye/dao.py b/stu_jiuye/dao.py index adf4d80..e70b3e6 100644 --- a/stu_jiuye/dao.py +++ b/stu_jiuye/dao.py @@ -1,61 +1,62 @@ -import like from model import Employments,Address,Company -def add_employment_dao(o,db): +def add_employment_dao(o,db): #新增就业信息函数 try: - # r = db.query(Employments).filter(Employments.id == o['id'] ).all() - o.pop('id', None) - o1 = Employments( **o) - db.add(o1) + # r = db.query(Employments).filter(Employments.id == o['id'] ).all() # + o.pop('id', None) #摘除id字段,自增字段无需手动添加 + o1 = Employments( **o) #实例化参数 + db.add(o1) #添加数据进入表 - except Exception as e: + except Exception as e: #失败返回 print(f'添加失败,{e}') - db.rollback() + db.rollback() #回滚数据 return False else: - db.commit() + db.commit() #提交事务,永久保存 return True -def add_company_dao(o,db): +def add_company_dao(o,db): #添加公司信息函数 try: - o.pop('id', None) - o1 = Company( **o) - db.add(o1) - except Exception as e: + o.pop('id', None) #摘除id字段,自增字段无需手动添加 + o1 = Company( **o) #实例化参数 + db.add(o1) #添加数据进入表 + except Exception as e: #失败返回 print(f'添加失败,{e}') - db.rollback() + db.rollback() #回滚数据 return False else: - db.commit() + db.commit() #提交事务,永久保存 return True -def add_address_dao(o,db): +def add_address_dao(o,db): #添加地址区域信息函数 try: - o.pop('id', None) - o1 = Address( **o) - db.add(o1) - except Exception as e: + o.pop('id', None) #摘除id字段,自增字段无需手动添加 + o1 = Address( **o) #实例化参数 + db.add(o1) #添加数据进入表 + except Exception as e: #失败返回 print(f'添加失败,{e}') - db.rollback() + db.rollback() #回滚数据 return False else: - db.commit() + db.commit() #提交事务,永久保存 return True -def update_emp_dao(id,update_data,db): - try: # 数据更新是有返回值的,返回的是影响的行数 - rows = db.query( Employments ).filter( Employments.id == id ).update( update_data ) +def update_emp_dao(id,update_data,db): #更新数据函数 + try: + rows = db.query( Employments )\ + .filter( Employments.id == id )\ + .update( update_data ) #更新条件匹配id except Exception as e: - print(f'更新失败,{e}') - db.rollback() + print(f'更新失败,{e}') #返回失败信息 + db.rollback() #数据回滚 return False else: - db.commit() + db.commit() #提交事务,永久保存 return rows -def get_emp_dao( +def get_emp_dao( #获取学生就业信息函数 # stuid, stuname ,compname @@ -64,22 +65,22 @@ def get_emp_dao( , max_salary: int | None = None # ,page # ,page_size - ): + ): #根据选择条件获取信息 q = db.query(Employments,Company.compname,Address.somewhere)\ .join(Company,Employments.company_id==Company.id)\ .join(Address,Company.address_id==Address.id)\ - .filter(Employments.is_deleted == 0) + .filter(Employments.is_deleted == 0) #连接公司表和地址表,筛选未被删除信息 # if stuid: # q = q.filter( Employments.id == stuid ) - if stuname: + if stuname: #根据学生姓名筛选 q = q.filter( Employments.stuname == stuname ) - if compname: + if compname: #根据公司姓名筛选 q=q.filter(Company.compname.like(f'%{compname}%')) # r = q.offset( (page-1)*page_size ).limit( page_size ).all() - if min_salary is not None: + if min_salary is not None: #根据最小薪资筛选 q = q.filter(Employments.salary >= min_salary) - if max_salary is not None: + if max_salary is not None: ##根据最大薪资筛选 q = q.filter(Employments.salary <= max_salary) r= q.all() if r: @@ -95,17 +96,19 @@ def get_emp_dao( "offer_date":i.offer_date, "created_date": i.created_date, "updated_date": i.updated_date, - "is_deleted":i.is_deleted } for i,compname,somewhere in r ] + "is_deleted":i.is_deleted } for i,compname,somewhere in r ] #返回信息列表 -def delete_emp_dao(id,db): - try: # 删除有返回值,删除的行数 - rows = db.query(Employments).filter(Employments.id == id).update( {'is_deleted':1} ) +def delete_emp_dao(id,db): #删除函数 + try: + rows = db.query(Employments)\ + .filter(Employments.id == id)\ + .update( {'is_deleted':1} ) #软删除,is_deleted返回1 - except Exception as e: + except Exception as e: #失败返回信息 print(f'删除失败,{e}') - db.rollback() - rows = 0 + db.rollback() #数据回滚 + rows = 0 #返回0 else: - db.commit() + db.commit() #提交事务,永久保存 return rows \ No newline at end of file diff --git a/stu_jiuye/model.py b/stu_jiuye/model.py index 466273e..0e0779d 100644 --- a/stu_jiuye/model.py +++ b/stu_jiuye/model.py @@ -30,21 +30,21 @@ from datetime import datetime # ) -class Employments(Base): - __tablename__ = 'Employments' - id = Column(Integer +class Employments(Base): #学生就业信息基类 + __tablename__ = 'Employments' #表名 + id = Column(Integer #主键,自增主键 , primary_key=True , autoincrement=True # , ForeignKey='student.id' , comment='自增主键' ) - stuname = Column(String(50)) - stuclass = Column(String(50)) + stuname = Column(String(50)) #学生姓名,冗余字段 + stuclass = Column(String(50)) #学生班级,冗余字段 # compname=Column(String(50) # ,nullable=False # ) - company_id = Column(Integer + company_id = Column(Integer #公司id,外键匹配公司表 , ForeignKey('Company.id') , nullable=False @@ -53,31 +53,33 @@ class Employments(Base): # , ForeignKey('Address.id') # , nullable=False # ) - salary = Column(Integer) + salary = Column(Integer) #薪资 - employment_open_date = Column(DATETIME) + employment_open_date = Column(DATETIME) #就业开放时间 - offer_date = Column(DATETIME) + offer_date = Column(DATETIME) #offer下发时间 - created_date = Column(DATETIME + created_date = Column(DATETIME #创建数据时间 , default=datetime.now ) - updated_date = Column(DATETIME + updated_date = Column(DATETIME #更新数据时间 , default=datetime.now , onupdate=datetime.now ) - is_deleted = Column(Integer, default=0) + is_deleted = Column(Integer, default=0) #是否为删除信息,默认为0 -class Company(Base): - __tablename__ = 'Company' +class Company(Base): #公司信息基类 + __tablename__ = 'Company' #表名 id = Column(Integer , primary_key=True ,autoincrement=True - ) - compname = Column(String(50), nullable=False) - address_id = Column(Integer - # , ForeignKey('Address.id') - , nullable=False + ) #主键id,自增主键 + compname = Column(String(50) #公司姓名 + , nullable=False #非空约束 + ) + address_id = Column(Integer #地址id,匹配地址表 + , ForeignKey('Address.id') #外键地址表id + , nullable=False #非空约束 ) created_date = Column(DATETIME , default=datetime.now @@ -90,11 +92,11 @@ class Company(Base): class Address(Base): __tablename__ = 'Address' - id = Column(Integer + id = Column(Integer #地址id,自增主键 , primary_key=True ,autoincrement=True ) - somewhere=Column(String(50) + somewhere=Column(String(50) #地址区域 , nullable=False ) created_date = Column(DATETIME diff --git a/stu_jiuye/request.py b/stu_jiuye/request.py index c760806..89acbbc 100644 --- a/stu_jiuye/request.py +++ b/stu_jiuye/request.py @@ -2,8 +2,7 @@ from datetime import * from pydantic import BaseModel, Field - -class PostRequest(BaseModel): +class PostRequest(BaseModel): #学生就业信息请求体模型 # compname: str|None=None stuname: str|None=None stuclass: str|None=None @@ -14,27 +13,27 @@ class PostRequest(BaseModel): offer_date:date|None=None updated_date:date|None=None is_deleted:int=0 -class EmpResponse(BaseModel): +class EmpResponse(BaseModel): #学生就业信息响应体 code: int = 200 detail: str = 'OK' totals: int = 0 data: str | dict | tuple | list -class CompRequest(BaseModel): +class CompRequest(BaseModel): #公司信息请求体模型 compname:str address_id: int | None = None -class CompResponse(BaseModel): +class CompResponse(BaseModel): #公司信息响应体 code: int = 200 detail: str = 'OK' totals: int = 0 data: str | dict | tuple | list -class AddRequest(BaseModel): +class AddRequest(BaseModel): #地址请求体 somewhere:str -class AddResponse(BaseModel): +class AddResponse(BaseModel): #地址响应体 code: int = 200 detail: str = 'OK' totals: int = 0