Files
0824Jlj/work.py
T

125 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 使用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文件启动整个接口程序
尝试操作下!
'''