From 53a48e0b215b718b5ee9461bed9ad86343f90356 Mon Sep 17 00:00:00 2001 From: yb <739325183@qq.com> Date: Sun, 20 Sep 2026 21:20:12 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stu_jiuye/CURD_api.py | 59 +++++++++++++++++++++++++++++++ stu_jiuye/dao.py | 74 +++++++++++++++++++++++++++++++++++++++ stu_jiuye/database.py | 21 +++++++++++ stu_jiuye/main.py | 15 ++++++++ stu_jiuye/model.py | 81 +++++++++++++++++++++++++++++++++++++++++++ stu_jiuye/request.py | 27 +++++++++++++++ stu_jiuye/services.py | 0 7 files changed, 277 insertions(+) create mode 100644 stu_jiuye/dao.py create mode 100644 stu_jiuye/model.py delete mode 100644 stu_jiuye/services.py diff --git a/stu_jiuye/CURD_api.py b/stu_jiuye/CURD_api.py index e69de29..622a370 100644 --- a/stu_jiuye/CURD_api.py +++ b/stu_jiuye/CURD_api.py @@ -0,0 +1,59 @@ +import datetime + +from fastapi import APIRouter,Depends,HTTPException +from dao import * +from stu_jiuye.request import PostRequest,EmpResponse +from database import get_db +CURD=APIRouter() + + +@CURD.get('/emp') +def get_stuinfo( + # stuid:int|None=None, + comname:str|None=None + ,min_salary:int=0 + ,max_salary:int|None=None + ,db=Depends(get_db) + ): + r=get_orders_dao( + # stuid, + comname, + db, + min_salary, + max_salary) + if r: + return r + raise HTTPException(status_code=404, detail='名单不存在!') + +@CURD.post('/emp',response_model=EmpResponse) +def add_stuinfo( + p:PostRequest,db=Depends(get_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) + +@CURD.put('/emp') +def updata_stuinfo(company:PostRequest + ,id:int + ,db=Depends(get_db) + ): + d = company.model_dump(exclude_unset=True) + r = update_orders_dao(id=id, update_data=d, db=db) + if not r: + raise HTTPException(status_code=500, detail='没有更新!') + return {'code': 200, 'totals': r, 'detail': '更新成功'} + +@CURD.delete('/emp') +def delete_stuinfo(id:int + ,db=Depends(get_db)): + rows = delete_orders_dao(id, db) + if not rows: + raise HTTPException(status_code=500, detail='没有删除!') + return {'code': 200, 'totals': rows, 'detail': '删除成功'} + + + + diff --git a/stu_jiuye/dao.py b/stu_jiuye/dao.py new file mode 100644 index 0000000..8887229 --- /dev/null +++ b/stu_jiuye/dao.py @@ -0,0 +1,74 @@ +from model import Employments,Address + + +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) + + except Exception as e: + print(f'添加失败,{e}') + db.rollback() + return False + else: + db.commit() + return True + + + +def update_orders_dao(id,update_data,db): + try: # 数据更新是有返回值的,返回的是影响的行数 + rows = db.query( Employments ).filter( Employments.id == id ).update( update_data ) + except: + db.rollback() + return False + else: + db.commit() + return rows + +def get_orders_dao( + # stuid, + name + ,db + , min_salary: int = 0 + , max_salary: int | None = None + # ,page + # ,page_size + ): + q = db.query(Employments) + # if stuid: + # q = q.filter( Employments.id == stuid ) + if name: + q = q.filter( Employments.stuname == name ) + # r = q.offset( (page-1)*page_size ).limit( page_size ).all() + if min_salary is not None: + q = q.filter(Employments.salary >= min_salary) + if max_salary is not None: + q = q.filter(Employments.salary <= max_salary) + r= q.all() + if r: + return [ {"id": i.id, + 'stuname':i.stuname, + 'stuclass':i.stuclass, + "company_name": i.compname, + "salary":i.salary, + "address_id": i.address_id, + "employment_open_date":i.employment_open_date, + "offer_date":i.offer_date, + "created_date": i.created_date, + "updated_date": i.updated_date, + "is_deleted":i.is_deleted } for i in r ] + + +def delete_orders_dao(id,db): + try: # 删除有返回值,删除的行数 + rows = db.query(Employments).filter(Employments.id == id).delete() + except Exception as e: + print(f'删除失败,{e}') + db.rollback() + rows = 0 + else: + db.commit() + return rows \ No newline at end of file diff --git a/stu_jiuye/database.py b/stu_jiuye/database.py index e69de29..33a1ef6 100644 --- a/stu_jiuye/database.py +++ b/stu_jiuye/database.py @@ -0,0 +1,21 @@ +from sqlalchemy import * +from sqlalchemy.orm import declarative_base,sessionmaker + +db_url = "mysql+pymysql://root:123456@127.0.0.1:3306/ai0824?charset=utf8mb4" +engine = create_engine(db_url) + +Base = declarative_base() +Session = sessionmaker(bind=engine + ,autoflush=False + ,autocommit = False + ) + + +def get_db(): + db = Session() + try: + yield db + finally: + db.close() + + diff --git a/stu_jiuye/main.py b/stu_jiuye/main.py index e69de29..d4be968 100644 --- a/stu_jiuye/main.py +++ b/stu_jiuye/main.py @@ -0,0 +1,15 @@ +from fastapi import FastAPI +from CURD_api import CURD +from database import Base,engine +import model +app=FastAPI() +Base.metadata.create_all(engine) +app.include_router(CURD,tags=['就业管理系统'],prefix='/employment') + + + +if __name__=='__main__': + import uvicorn + uvicorn.run('main:app', host='127.0.0.1', port=12395) + + diff --git a/stu_jiuye/model.py b/stu_jiuye/model.py new file mode 100644 index 0000000..05dca71 --- /dev/null +++ b/stu_jiuye/model.py @@ -0,0 +1,81 @@ +from sqlalchemy import ForeignKey + +from database import DATETIME,Base,Column,Integer,String,engine +from datetime import datetime + + + +# class Student(Base): +# __tablename__ = 'Student' +# id = Column(Integer +# , primary_key=True +# , autoincrement=True +# # 外键 +# ,comment='自增主键' +# ) +# +# stuname = Column(String(50) +# ,nullable=False +# ) +# +# stuid=Column(Integer +# ,nullable=False +# ) +# stuclass=Column(String(50) +# ,nullable=False +# ) +# +# +# created_date = Column(DATETIME +# ,default=datetime.now +# ) +# updated_date = Column(DATETIME +# ,default=datetime.now +# ,onupdate=datetime.now +# ) + + +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)) + + compname=Column(String(50) + ,nullable=False + ) + address_id=Column(Integer + ,nullable=False + ) + + salary = Column(Integer) + + employment_open_date = Column(DATETIME) + + offer_date = Column(DATETIME) + + created_date = Column(DATETIME + , default=datetime.now + ) + updated_date = Column(DATETIME + , default=datetime.now + , onupdate=datetime.now + ) + is_deleted = Column(Integer, default=0) +class Address(Base): + __tablename__ = 'address' + id = Column(Integer + , primary_key=True + , autoincrement=True + # , ForeignKey='company.id' + , comment='自增主键' + ) + somewhere=Column(String(50) + , nullable=False + ) + diff --git a/stu_jiuye/request.py b/stu_jiuye/request.py index e69de29..9b02955 100644 --- a/stu_jiuye/request.py +++ b/stu_jiuye/request.py @@ -0,0 +1,27 @@ +from datetime import * +from pydantic import BaseModel, Field + + + +class PostRequest(BaseModel): + compname: str|None=None + stuname: str|None=None + stuclass: str|None=None + address_id: int|None=None + salary: int|None=None + employment_open_date:date|None=None + offer_date:date|None=None + created_date: datetime=Field(default_factory=datetime.now) + updated_date: datetime=Field(default_factory=datetime.now) + is_deleted: bool = False + +class EmpResponse(BaseModel): + code: int = 200 + detail: str = 'OK' + totals: int = 0 + data: str | dict | tuple | list + + + + + diff --git a/stu_jiuye/services.py b/stu_jiuye/services.py deleted file mode 100644 index e69de29..0000000