12
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
# 使用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文件启动整个接口程序
|
||||
尝试操作下!
|
||||
'''
|
||||
Reference in New Issue
Block a user