重构第一版:重新验证2.0推荐写法

This commit is contained in:
geeker
2026-09-24 17:19:56 +08:00
parent 81db17ba9e
commit 0d71808498
21 changed files with 1887 additions and 936 deletions
+2 -1
View File
@@ -9,11 +9,12 @@ from model.order import OrderRequest,Order,get_session,OrderResponse
from dao.order_dao import get_order
route = APIRouter(prefix="/order",tags=["orders"])
route = APIRouter(prefix="/order",tags=["order"])
# 模糊查询
@route.get('/',response_model=OrderResponse)
def orders(id:int=None, user_id:int=None, title:str=None,session=Depends(get_session)):
return get_order(id,user_id,title,session)
# todo 请求响应模型序列化Order类问题
+77
View File
@@ -0,0 +1,77 @@
# 编写更订单相关的增删改查接口,结合数据库
from fastapi import FastAPI, APIRouter, Depends
from sqlalchemy import *
from sqlalchemy.orm import declarative_base,sessionmaker
from datetime import datetime
from pydantic import BaseModel
from model.order import OrderRequest,Order,get_session,OrderResponse
from dao.order_dao import get_order
route = APIRouter(prefix="/order_select_query",tags=["order_select_query"])
# 模糊查询
@route.get('/query',response_model=OrderResponse)
def orders(id:int=None, user_id:int=None, title:str=None,session=Depends(get_session)):
q = session.query(Order)
if id: q = q.filter(Order.id == id)
if user_id: q = q.filter(Order.userid == user_id)
if title: q = q.where(Order.title.like('%' + title + '%'))
res = q.all()
return {"data": [{"order_id": r.id, 'order_title': r.title, "user_id": r.userid, "create_date": r.create_date,
"update_date": r.update_date} for r in res]}
@route.get('/select', response_model=OrderResponse)
def orders(id: int = None, user_id: int = None, title: str = None, session=Depends(get_session)):
s = select(Order)
if id: s = s.filter(Order.id == id)
if user_id: s = s.filter(Order.userid == user_id)
if title: s = s.where(Order.title.like('%' + title + '%'))
res = session.execute(s)
return {"data": [{"order_id": r.id, 'order_title': r.title, "user_id": r.userid, "create_date": r.create_date,
"update_date": r.update_date} for r in res]}
# todo 请求响应模型序列化Order类问题
@route.get('/no_response_model')
def orders(id:int=None, user_id:int=None, title:str=None,session=Depends(get_session)):
q = session.query(Order)
if id: q = q.filter(Order.id == id)
if user_id: q = q.filter(Order.userid == user_id)
if title: q = q.where(Order.title.like('%' + title + '%'))
res = q.all()
return res
@route.get('/{id}',response_model=OrderResponse)
def orders(id:int,session=Depends(get_session)):
r = session.query(Order).filter( Order.id == id ).first()
session.close()
return {"data":
{"order_id":r.id,'order_title':r.title,"user_id":r.userid,"create_date":r.create_date,"update_date":r.update_date}
}
@route.delete('/',response_model=OrderResponse)
def orders(session=Depends(get_session)):
return '删除订单'
@route.post('/',response_model=OrderResponse)
def orders(order:OrderRequest,session=Depends(get_session)):
d = order.model_dump() # d = {"title":xxx,"userid":xxx}
o1 = Order( **d )
session.add(o1)
session.commit()
session.close()
return {'code':200,'detail':'添加成功!'}
@route.put('/{id}',response_model=OrderResponse)
def orders(order:OrderRequest,id:int,session=Depends(get_session)):
r = session.query( Order ).filter( Order.id == id ).update( order.model_dump(exclude_unset=True) )
session.commit()
session.close()
return OrderResponse(status_code='200',detail='ok',total=r)
+28
View File
@@ -0,0 +1,28 @@
from sqlalchemy import Column, Integer
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession
from sqlalchemy.orm import sessionmaker,declarative_base,DeclarativeBase
from fastapi import APIRouter, Depends
from debug.orm_app.sqlalchemy_full_app import User
route = APIRouter(prefix="/session",tags=["session"])
db_url = "mysql+aiomysql://geeker:geeker@localhost:3306/fastapi_tutor?charset=utf8mb4"
engine = create_async_engine(db_url)
async_session = async_sessionmaker(engine, expire_on_commit=False)
async def get_db() -> AsyncSession:
async with async_session() as session:
yield session
@route.get("/")
async def index(session: AsyncSession = Depends(get_db)):
u1 = User(username='test session')
session.add(u1)
await session.commit()