125 lines
4.0 KiB
Python
125 lines
4.0 KiB
Python
# 使用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文件启动整个接口程序
|
|||
|
|
尝试操作下!
|
|||
|
|
'''
|