# 使用orm结合fastapi接口对数据库的订单表进行增删改查 # ① 连接数据库,定义数据库表模型,以及数据库会话工具 # ② 定义请求体模型,编写post接口对数据库的订单表插入数据 # ③ 编写put接口对订单进行更新操作 # ④ 编写get接口对订单进行查询操作 # ⑤ 编写delete接口对订单进行删除操作 # ⑥ 总结下orm跟fastapi接口的结合使用步骤以及简单的语法结构框架 from fastapi import FastAPI,HTTPException from sqlalchemy import * from sqlalchemy.orm import declarative_base,sessionmaker from datetime import datetime from pydantic import BaseModel db_url = "mysql+pymysql://root:123456@127.0.0.1:3306/ai0824?charset=utf8mb4" engine = create_engine(db_url) Base = declarative_base() class Order(Base): __tablename__ = 'order_detail' id = Column(Integer , primary_key=True , autoincrement=True ,comment='订单编号,自增主键' ) title= Column( String(50) ,nullable=False ) user_id= Column(Integer,nullable=False) create_date = Column(DATETIME , default=datetime.now ) update_date = Column(DATETIME , default=datetime.now , onupdate=datetime.now ) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine , autoflush=False , autocommit=False ) db=Session() app = FastAPI(title='订单管理系统') from fastapi import Depends from sqlalchemy.orm import Session def get_db(): db = Session() try: yield db finally: db.close() class OrderRequest(BaseModel): title:str|None = None user_id:int|None =None @app.put('/orders/{id}') def update_order(order: OrderRequest, id: int, db: Session = Depends(get_db)): db_order = db.query(Order).filter(Order.id == id).first() if not db_order: raise HTTPException(status_code=404, detail="订单不存在") for key, value in order.model_dump(exclude_unset=True).items(): setattr(db_order, key, value) db.commit() return '更新订单成功' @app.put('/orders/{id}',summary='订单更新接口') def get_orders(order:OrderRequest,id:int): db.query(Order).filter( Order.id == id ).update( order.model_dump(exclude_unset=True) ) db.commit() db.close() return '更新订单成功' @app.get('/orders',summary='订单查询接口') def get_orders(order_title:str): r = db.query(Order).filter( Order.title == order_title ).all() db.close() return [{"order_id": i.id, 'order_title': i.title, "user_id": i.user_id, "create_date": i.create_date, "update_date": i.update_date} for i in r] @app.delete('/orders/{id}',summary='订单删除接口') def delete_orders(order:OrderRequest,id:int): db.query(Order).filter( Order.id == id ).delete( ) db.commit() db.close() return '删除订单成功' if __name__ == '__main__': import uvicorn uvicorn.run("work:app",host='0.0.0.0',port=12345) # 导入依赖 # 创建数据库引擎 # 创建基类 # 定义表模型(继承 Base) # 创建表(create_all) # 创建会话工厂 # 创建 FastAPI 应用 # 定义请求体模型(Pydantic) # 编写增删改查接口 # 启动服务 ''' # 思考下: 现在需要创建三个目录,api、model、schema ① api目录里编写一个文件order_api.py ,利用api路由分发,存放编写好的以上四个订单增删改查接口 ② model目录里编写一个order_model.py ,存放的是订单表的表模型类 ③ schema目录里编写一个 order_schema.py , 存放的是订单表的相关请求体、相应体模型 ④ 在项目目录下创建一个 main.py文件,从main.py文件启动整个接口程序 尝试操作下! '''