Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91a5b5ec4c | ||
|
|
60138f5c7d | ||
|
|
e6a6d38362 | ||
|
|
43495e1dcc |
BIN
Binary file not shown.
+18
@@ -0,0 +1,18 @@
|
||||
from sqlalchemy import *
|
||||
from sqlalchemy.orm import declarative_base,sessionmaker
|
||||
|
||||
db_url = "mysql+pymysql://root:123456@127.0.0.1:3306/ai0824?charset=utf8mb4"
|
||||
engine = create_engine(db_url)
|
||||
|
||||
Base = declarative_base()
|
||||
Session = sessionmaker(bind=engine
|
||||
,autoflush=False
|
||||
,autocommit = False
|
||||
)
|
||||
|
||||
def get_db():
|
||||
db = Session()
|
||||
try:
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
@@ -1,50 +0,0 @@
|
||||
from day23sk.model.order_model import Order,User
|
||||
def add_student_dao(o,db):
|
||||
try:
|
||||
r = db.query(User).filter(User.id == o['userid']).all()
|
||||
if r:
|
||||
o1 = Order( **o) # 将字典解析成键值对关键字参数输入 title = xxx, userid = XXX
|
||||
db.add(o1)
|
||||
else:
|
||||
raise ValueError
|
||||
except:
|
||||
db.rollback()
|
||||
return False
|
||||
else:
|
||||
db.commit()
|
||||
return True
|
||||
#111
|
||||
|
||||
|
||||
def update_orders_dao(id,update_data,db):
|
||||
try: # 数据更新是有返回值的,返回的是影响的行数
|
||||
rows = db.query( Order ).filter( Order.id == id ).update( update_data )
|
||||
except:
|
||||
db.rollback()
|
||||
return False
|
||||
else:
|
||||
db.commit()
|
||||
return rows
|
||||
|
||||
def get_orders_dao(id,order_title,db,page,page_size):
|
||||
q = db.query(Order)
|
||||
if id:
|
||||
q = q.filter( Order.id == id )
|
||||
if order_title:
|
||||
q = q.filter( Order.title == order_title )
|
||||
r = q.offset( (page-1)*page_size ).limit( page_size ).all()
|
||||
if r:
|
||||
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]
|
||||
|
||||
|
||||
def delete_orders_dao(id,db):
|
||||
try: # 删除有返回值,删除的行数
|
||||
rows = db.query(Order).filter(Order.id == id).delete()
|
||||
except:
|
||||
db.rollback()
|
||||
rows = 0
|
||||
else:
|
||||
db.commit()
|
||||
finally:
|
||||
return rows
|
||||
@@ -0,0 +1,11 @@
|
||||
from fastapi import FastAPI
|
||||
from day23sk.api.order_api import order_api
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
app.include_router(order_api,tags=['订单接口'],prefix='/orders')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import uvicorn
|
||||
uvicorn.run("main:app",host='0.0.0.0',port=12345)
|
||||
@@ -1,47 +1,50 @@
|
||||
from fastapi import APIRouter,Depends,HTTPException
|
||||
from day23sk.schema.order_request import OrderRequest,OrderResponse
|
||||
from day23sk.database import get_db
|
||||
from day23sk.model.order_model import Order
|
||||
from day23sk.dao.order_dao import add_student_dao,update_orders_dao,delete_orders_dao,get_orders_dao
|
||||
|
||||
order_api = APIRouter()
|
||||
|
||||
|
||||
@order_api.post('',response_model=OrderResponse)
|
||||
def add_orders(order:OrderRequest,db=Depends(get_db)):
|
||||
d = order.model_dump()
|
||||
r = add_student_dao( o=d,db=db )
|
||||
if not r:
|
||||
raise HTTPException(status_code=500,detail='服务器繁忙或用户不存在!')
|
||||
return OrderResponse(totals=1,data=d)
|
||||
|
||||
@order_api.put('/{id}')
|
||||
def get_orders(order:OrderRequest,id:int,db=Depends(get_db)):
|
||||
d = order.model_dump(exclude_unset=True)
|
||||
r = update_orders_dao( id=id,update_data=d,db=db )
|
||||
if not r:
|
||||
raise HTTPException(status_code=500, detail='没有更新!')
|
||||
return {'code':200,'totals':r,'detail':'更新成功'}
|
||||
|
||||
@order_api.get('')
|
||||
def get_orders(id:int|None = None ,order_title:str|None = None,db=Depends(get_db),page:int=1,page_size:int=10):
|
||||
r = get_orders_dao(id,order_title,db,page,page_size )
|
||||
if r:
|
||||
return r
|
||||
raise HTTPException(status_code=404,detail='订单不存在!')
|
||||
|
||||
@order_api.delete('/{id}')
|
||||
def get_orders(id:int,db=Depends(get_db)):
|
||||
rows = delete_orders_dao(id,db)
|
||||
if not rows:
|
||||
raise HTTPException(status_code=500,detail='没有删除!')
|
||||
return {'code':200,'totals':rows,'detail':'删除成功'}
|
||||
|
||||
# 要求:
|
||||
'''
|
||||
①把剩下的delete、get查询接口完成dao层的分层 (√)
|
||||
②新增一个user_info的表,有外键联系,oder订单表外键依赖user_info,改造一下订单post的接口,新增订单前,判断下用户的id是否存在user_info表里
|
||||
'''
|
||||
|
||||
|
||||
|
||||
from fastapi import APIRouter,Depends,HTTPException
|
||||
from day23sk.schema.order_request import OrderRequest,OrderResponse
|
||||
from day23sk.database import get_db
|
||||
from day23sk.model.order_model import Order
|
||||
from day23sk.dao.order_dao import add_student_dao,update_orders_dao,delete_orders_dao,get_orders_dao
|
||||
|
||||
order_api = APIRouter()
|
||||
|
||||
|
||||
@order_api.post('',response_model=OrderResponse)
|
||||
def add_orders(order:OrderRequest,db=Depends(get_db)):
|
||||
d = order.model_dump()
|
||||
r = add_student_dao( o=d,db=db )
|
||||
if not r:
|
||||
raise HTTPException(status_code=500,detail='服务器繁忙,请稍后添加!')
|
||||
return OrderResponse(totals=1,data=d)
|
||||
|
||||
@order_api.put('/{id}')
|
||||
def get_orders(order:OrderRequest,id:int,db=Depends(get_db)):
|
||||
d = order.model_dump(exclude_unset=True)
|
||||
r = update_orders_dao( id=id,update_data=d,db=db )
|
||||
if not r:
|
||||
raise HTTPException(status_code=500, detail='没有更新!')
|
||||
return {'code':200,'totals':r,'detail':'更新成功'}
|
||||
|
||||
@order_api.get('')
|
||||
def get_orders(order_title:str,db=Depends(get_db)):
|
||||
r = get_orders_dao( order_title=order_title ,db=db )
|
||||
if r is None:
|
||||
raise HTTPException(status_code=500,detail='订单异常!')
|
||||
if not r:
|
||||
raise HTTPException(status_code=404,detail="订单不存在")
|
||||
return [{"order_id":i.id,"order_title":i.order_title,"user_id":i.userid,"create_date":i.create_date,"update_date":i.update_date} for i in r]
|
||||
@order_api.delete('/{id}')
|
||||
def get_orders(id:int,db=Depends(get_db)):
|
||||
r = delete_orders_dao( id=id ,db=db)
|
||||
if r is None:
|
||||
raise HTTPException(status_code=500, detail='删除异常,稍后操作!')
|
||||
if r == 0:
|
||||
raise HTTPException(status_code=404, detail='订单不存在!')
|
||||
return {'code': 200, 'totals': r, 'detail': '删除成功'}
|
||||
|
||||
# 要求:
|
||||
'''
|
||||
①把剩下的delete、get查询接口完成dao层的分层 (√)
|
||||
②新增一个user_info的表,有外键联系,oder订单表外键依赖user_info,改造一下订单post的接口,新增订单前,判断下用户的id是否存在user_info表里
|
||||
'''
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
from day23sk.model.order_model import Order
|
||||
|
||||
|
||||
def add_student_dao(o,db):
|
||||
try:
|
||||
o1 = Order( **o) # 将字典解析成键值对关键字参数输入 title = xxx, userid = XXX
|
||||
db.add(o1)
|
||||
except Exception:
|
||||
db.rollback()
|
||||
return False
|
||||
else:
|
||||
db.commit()
|
||||
return True
|
||||
|
||||
|
||||
|
||||
def update_orders_dao(id,update_data,db):
|
||||
try: # 数据更新是有返回值的,返回的是影响的行数
|
||||
rows = db.query( Order ).filter( Order.id == id ).update( update_data )
|
||||
except Exception:
|
||||
db.rollback()
|
||||
return False
|
||||
else:
|
||||
db.commit()
|
||||
return rows
|
||||
|
||||
def delete_orders_dao(id,db):
|
||||
try:
|
||||
rows = db.query( Order ).filter( Order.id == id ).delete()
|
||||
except Exception:
|
||||
db.rollback()
|
||||
return None
|
||||
else:
|
||||
db.commit()
|
||||
return rows
|
||||
|
||||
def get_orders_dao(order_title,db):
|
||||
try:
|
||||
rows = db.query( Order ).filter( Order.title == order_title ).all()
|
||||
except Exception:
|
||||
db.rollback()
|
||||
return False
|
||||
else:
|
||||
db.commit()
|
||||
return rows
|
||||
@@ -1,43 +1,23 @@
|
||||
from day23sk.database import DATETIME,Base,Column,Integer,String
|
||||
from datetime import datetime
|
||||
|
||||
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
|
||||
# ,ForeignKey('user_info_detail.id')
|
||||
,nullable=False ) # 外键约束
|
||||
create_date = Column(DATETIME
|
||||
, default=datetime.now # 默认值是当前时间
|
||||
)
|
||||
update_date = Column(DATETIME
|
||||
, default=datetime.now # 首次创建的时间跟更新时间一致
|
||||
, onupdate=datetime.now
|
||||
)
|
||||
|
||||
|
||||
class User(Base): # python里的表名字
|
||||
__tablename__ = 'user_info_detail' # 实际数据库的表名字
|
||||
id = Column( Integer # 声明字段的数据类型
|
||||
, primary_key=True # 声明是主键
|
||||
, autoincrement=True # 声明是自增主键
|
||||
, comment='用户编号,自增主键' # 注释
|
||||
)
|
||||
usernmae = Column( String(50) # 对应数据库的varchar类型
|
||||
,nullable=False # 不允许为null
|
||||
,comment='用户名'
|
||||
)
|
||||
create_date = Column(DATETIME
|
||||
, default=datetime.now # 默认值是当前时间
|
||||
)
|
||||
update_date = Column(DATETIME
|
||||
, default=datetime.now # 首次创建的时间跟更新时间一致
|
||||
, onupdate=datetime.now
|
||||
from day23sk.database import DATETIME,Base,Column,Integer,String
|
||||
from datetime import datetime
|
||||
|
||||
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
|
||||
# ,ForeignKey('user_info_detail.id')
|
||||
,nullable=False ) # 外键约束
|
||||
create_date = Column(DATETIME
|
||||
, default=datetime.now # 默认值是当前时间
|
||||
)
|
||||
update_date = Column(DATETIME
|
||||
, default=datetime.now # 首次创建的时间跟更新时间一致
|
||||
, onupdate=datetime.now
|
||||
)
|
||||
@@ -0,0 +1,15 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
# 定义创建订单的请求体模型
|
||||
class OrderRequest(BaseModel):
|
||||
title: str | None = None
|
||||
userid: int | None = None
|
||||
|
||||
|
||||
class OrderResponse(BaseModel):
|
||||
code: int = 200
|
||||
detail: str = 'OK'
|
||||
totals: int = 0
|
||||
data: str | dict | tuple | list
|
||||
|
||||
Reference in New Issue
Block a user