90 lines
3.5 KiB
Python
90 lines
3.5 KiB
Python
# 使用orm结合fastapi接口对数据库的订单表进行增删改查
|
|
from sqlalchemy import *
|
|
from sqlalchemy.orm import declarative_base,sessionmaker
|
|
from datetime import datetime
|
|
from pydantic import BaseModel
|
|
from fastapi import FastAPI,Form
|
|
# ① 连接数据库,定义数据库表模型,以及数据库会话工具
|
|
db_url = "mysql+pymysql://root:123456@127.0.0.1:3306/ai0824?charset=utf8mb4"
|
|
engine = create_engine(db_url
|
|
,echo=True
|
|
,pool_size=50
|
|
)
|
|
Base = declarative_base()
|
|
|
|
|
|
class Order(Base): # python里的表名字
|
|
__tablename__ = 'order_info_detail' # 实际数据库的表名字
|
|
id = Column( Integer # 声明字段的数据类型
|
|
, primary_key=True # 声明是主键
|
|
, autoincrement=True # 声明是自增主键
|
|
, comment='订单编号,自增主键' # 注释
|
|
)
|
|
title = Column( String(50) # 对应数据库的varchar类型
|
|
,nullable=False # 不允许为null
|
|
)
|
|
userid = Column( Integer ) # 外键约束
|
|
create_date = Column(DATETIME
|
|
, default=datetime.now # 默认值是当前时间
|
|
)
|
|
update_date = Column(DATETIME
|
|
, default=datetime.now # 首次创建的时间跟更新时间一致
|
|
, onupdate=datetime.now
|
|
)
|
|
Order.__table__.create(engine, checkfirst=True)
|
|
session = sessionmaker(bind=engine
|
|
,autoflush=False
|
|
,autocommit=False
|
|
)
|
|
# ② 定义请求体模型,编写post接口对数据库的订单表插入数据
|
|
class Order1(BaseModel):
|
|
title:str
|
|
userid:int
|
|
app = FastAPI(title='订单增删改')
|
|
@app.post('/Orders')
|
|
def order1(o:Order1=Form()):
|
|
db = session()
|
|
d = o.model_dump()
|
|
o1 = Order(**d)
|
|
db.add(o1)
|
|
db.commit()
|
|
db.close()
|
|
return o1
|
|
# ③ 编写put接口对订单进行更新操作
|
|
@app.put('/Orders')
|
|
def order1(id:int,o:Order1=Form()):
|
|
db = session()
|
|
db.query(Order).filter(Order.id == id).update(o.model_dump(exclude_unset=True))
|
|
db.commit()
|
|
db.close()
|
|
return '查询订单'
|
|
# ④ 编写get接口对订单进行查询操作
|
|
@app.get('/Orders')
|
|
def order1(title:str|None=None,id:int|None=None):
|
|
db = session()
|
|
print(title,id)
|
|
r = db.query(Order).filter(or_(Order.title == title,Order.userid == id)).all()
|
|
db.close()
|
|
return [ {"order_id":i.id,'order_title':i.title,"user_id":i.userid,"create_date":i.create_date,"update_date":i.update_date} for i in r]
|
|
# ⑤ 编写delete接口对订单进行删除操作
|
|
@app.delete('/Orders')
|
|
def order1(title:str,id:int|None=None):
|
|
db = session()
|
|
db.query(Order).filter(or_(Order.title == title,Order.id == id)).delete()
|
|
db.commit()
|
|
db.close()
|
|
return '删除成功'
|
|
# ⑥ 总结下orm跟fastapi接口的结合使用步骤以及简单的语法结构框架
|
|
'''
|
|
连接数据库,创建模型基类,定义数据库表模型,以及数据库会话工具
|
|
'''
|
|
'''
|
|
# 思考下:
|
|
现在需要创建三个目录,api、model、schema
|
|
① api目录里编写一个文件order_api.py ,利用api路由分发,存放编写好的以上四个订单增删改查接口
|
|
② model目录里编写一个order_model.py ,存放的是订单表的表模型类
|
|
③ schema目录里编写一个 order_schema.py , 存放的是订单表的相关请求体、相应体模型
|
|
④ 在项目目录下创建一个 main.py文件,从main.py文件启动整个接口程序
|
|
尝试操作下!
|
|
'''
|