diff --git a/database.py b/database.py new file mode 100644 index 0000000..a3fe684 --- /dev/null +++ b/database.py @@ -0,0 +1,19 @@ +from sqlalchemy import * +from sqlalchemy.orm import declarative_base,sessionmaker + +db_url = "mysql+pymysql://root:123456@127.0.0.1:3306/ai0824?charset=utf8" +engine = create_engine(db_url,pool_size=50) + +Base = declarative_base() + +Session = sessionmaker(bind=engine + ,autoflush=False + ,autocommit = False + ) + +def get_db(): + db = Session() + try: + yield db + finally: + db.close() \ No newline at end of file diff --git a/order_api.py b/order_api.py new file mode 100644 index 0000000..45e02d9 --- /dev/null +++ b/order_api.py @@ -0,0 +1,47 @@ +# 使用orm结合fastapi接口对数据库的订单表进行增删改查 +# ① 连接数据库,定义数据库表模型,以及数据库会话工具 +# ② 定义请求体模型,编写post接口对数据库的订单表插入数据 +# ③ 编写put接口对订单进行更新操作 +# ④ 编写get接口对订单进行查询操作 +# ⑤ 编写delete接口对订单进行删除操作 +# ① api目录里编写一个文件order_api.py ,利用api路由分发,存放编写好的以上四个订单增删改查接口 +from fastapi import APIRouter, Depends, HTTPException +from homework.day23.schema.order_schema import * +from homework.day23.database import get_db +from homework.day23.dao.order_dao import * + +OrderAPI = APIRouter() + +@OrderAPI.post("",summary="订单新增接口",response_model=OrderResponse) +def add_order(ord:list[OrderRequest],db=Depends(get_db)): + for i in ord: + d = i.model_dump() + r = add_order_dao(o=d,db=db) + if not r: + raise HTTPException(status_code=500,detail='添加失败!请稍后在添加!') + return OrderResponse(detail='添加成功!',total=len(ord)) + +@OrderAPI.put("/{order_id}",summary="订单更新接口",response_model=OrderResponse) +def update_order(order_id:int, ord:OrderRequest,db=Depends(get_db)): + rows = update_order_dao(id=order_id,o=ord,db=db) + if not rows: + raise HTTPException(status_code=500, detail='更新失败!') + return OrderResponse(detail='更新成功!',total= rows ) + +@OrderAPI.get("",summary="订单查询接口",response_model=OrderResponse) +def get_order(order_title:str|None = None,order_id:int|None = None,page:int=1,page_size:int=10,db=Depends(get_db)): + r = get_order_dao(id = order_id,title=order_title,p=page,pz=page_size,db=db) + if r: + return OrderResponse(detail='更新成功!',total=len(r),data=r ) + raise HTTPException(status_code=404, detail='订单不存在!') + +@OrderAPI.delete("/{order_id}",summary="订单删除接口",response_model=OrderResponse) +def delete_order(order_id:int,db=Depends(get_db)): + rows = del_order_dao(id=order_id,db=db) + if not rows: + raise HTTPException(status_code=500, detail='删除异常!') + return OrderResponse(detail='删除成功!',total= rows ) + + + + diff --git a/order_dao.py b/order_dao.py new file mode 100644 index 0000000..64e2b83 --- /dev/null +++ b/order_dao.py @@ -0,0 +1,41 @@ +from homework.day23.model.order_model import * +from sqlalchemy import * +def add_order_dao(o ,db): + try: + ord1 = Order(**o) + db.add(ord1) + except: + db.rollback() + return False + else: + db.commit() + return True + +def get_order_dao(id,title,p,pz,db): + r = db.query(Order).filter(or_(Order.title == title, Order.id == id)).\ + offset((p - 1) * pz).limit(pz).all() + if r: + return [{'Order_id': i.id, 'Order_title': i.title, 'userid': i.userid, + 'create_date': i.create_date, 'update_date': i.update_date} for i in r] + +def del_order_dao(id,db): + try: + rows = db.query(Order).filter(Order.id == id).delete() + except: + db.rollback() + rows = 0 + else: + db.commit() + finally: + return rows + +def update_order_dao(id,o,db): + try: + rows = db.query(Order).filter(Order.id == id ).update(o.model_dump(exclude_unset=True)) + except: + db.rollback() + rows = 0 + else: + db.commit() + finally: + return rows \ No newline at end of file diff --git a/order_model.py b/order_model.py new file mode 100644 index 0000000..5759777 --- /dev/null +++ b/order_model.py @@ -0,0 +1,15 @@ +# model目录里编写一个order_model.py ,存放的是订单表的表模型类 +from homework.day23.database import DATETIME,Base,Column,Integer,String,engine +from datetime import datetime + +class Order(Base): + __tablename__ = "order_info" + id = Column(Integer , primary_key=True, autoincrement=True, comment='订单编号,自增主键') + title = Column(String(50) , nullable=False) + userid = Column(Integer + # ,ForeignKey('user_info_detail.id') + , nullable=False) + create_date = Column(DATETIME, default=datetime.now) + update_date = Column(DATETIME, default=datetime.now, onupdate=datetime.now) + +Base.metadata.create_all(engine) diff --git a/order_schema.py b/order_schema.py new file mode 100644 index 0000000..d94bd82 --- /dev/null +++ b/order_schema.py @@ -0,0 +1,16 @@ + +# order_schema.py, 存放的是订单表的相关请求体、相应体模型 +from pydantic import BaseModel + +class OrderRequest(BaseModel): + title:str|None = None + userid:int|None=None + +class OrderResponse(BaseModel): + code:int = 200 + detail:str = '成功' + total:int = 1 + data:int|list|dict|tuple|None + + +