增加多字段查询
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
from fastapi import APIRouter,Depends,HTTPException
|
from datetime import date
|
||||||
|
|
||||||
|
from fastapi import APIRouter,Depends,HTTPException,Query
|
||||||
from dao.class_management_dao import add_class_dao, update_class_dao, get_class_dao, delete_class_dao
|
from dao.class_management_dao import add_class_dao, update_class_dao, get_class_dao, delete_class_dao
|
||||||
from database import get_db
|
from database import get_db
|
||||||
from schema.class_management_request import ClassCreate, ClassResponse, ClassUpdate
|
from schema.class_management_request import ClassCreate, ClassResponse, ClassUpdate
|
||||||
@@ -23,16 +25,46 @@ def get_one_class(class_id:int,db=Depends(get_db)):
|
|||||||
raise HTTPException(status_code=404, detail="该班级不存在或已删除")
|
raise HTTPException(status_code=404, detail="该班级不存在或已删除")
|
||||||
return ClassResponse(data=res)
|
return ClassResponse(data=res)
|
||||||
|
|
||||||
|
@class_api.get('/classes',summary='多字段查询班级')
|
||||||
|
def get_some_classes(class_name:str|None = Query(None,description='班级名称')
|
||||||
|
,class_teacher:str|None = Query(None,description='班主任')
|
||||||
|
,class_lecturer:str|None = Query(None,description='授课老师')
|
||||||
|
,class_start_time:date|None = Query(None, description="开班日期,格式YYYY‑MM‑DD")
|
||||||
|
,class_end_time: date|None = Query(None, description="结课日期,格式YYYY‑MM‑DD")
|
||||||
|
,page:int = Query(1,ge=1,description='页码,从1开始')
|
||||||
|
,page_size:int = Query(5,ge=1,le=50,description='每页信息条数')
|
||||||
|
,db=Depends(get_db)
|
||||||
|
):
|
||||||
|
c_dict={'class_name':class_name
|
||||||
|
,'class_teacher':class_teacher
|
||||||
|
,'class_lecturer':class_lecturer
|
||||||
|
,'class_start_time':class_start_time
|
||||||
|
,'class_end_time':class_end_time
|
||||||
|
}
|
||||||
|
c_dict={k:v for k,v in c_dict.items() if v is not None}#过滤掉值为None的key
|
||||||
|
|
||||||
|
res = get_class_dao(c=c_dict,db=db)
|
||||||
|
total = len(res)
|
||||||
|
|
||||||
|
#内存分页
|
||||||
|
start_index = (page-1)*page_size
|
||||||
|
page_data = res[start_index:start_index + page_size]
|
||||||
|
|
||||||
|
page_response = ClassResponse(data=page_data,totals=total)
|
||||||
|
return page_response
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@class_api.put("/classes/{class_id}",summary='修改班级信息')
|
@class_api.put("/classes/{class_id}",summary='修改班级信息')
|
||||||
def update_class(update_info:ClassUpdate,cid:int,db=Depends(get_db)):
|
def update_class(class_id,update_info:ClassUpdate,db=Depends(get_db)):
|
||||||
update_dict=update_info.model_dump(exclude_unset=True)
|
update_dict=update_info.model_dump(exclude_unset=True)
|
||||||
if not update_dict:
|
if not update_dict:
|
||||||
raise HTTPException(status_code=400, detail="没有传入要修改的字段")
|
raise HTTPException(status_code=400, detail="没有传入要修改的字段")
|
||||||
row_count = update_class_dao(cname=cid, update_data=update_dict, db=db)
|
row_count = update_class_dao(cid=class_id, update_data=update_dict, db=db)
|
||||||
if row_count <= 0:
|
if row_count <= 0:
|
||||||
raise HTTPException(status_code=404, detail="班级不存在,修改失败")
|
raise HTTPException(status_code=404, detail="班级不存在,修改失败")
|
||||||
return ClassResponse(detail="修改成功", data={"class_id": cid})
|
return ClassResponse(detail="修改成功", data={"class_id": class_id})
|
||||||
|
|
||||||
|
|
||||||
@class_api.delete('/classes/{class_id}',summary='逻辑删除班级')
|
@class_api.delete('/classes/{class_id}',summary='逻辑删除班级')
|
||||||
|
|||||||
+34
-17
@@ -1,10 +1,10 @@
|
|||||||
from model.class_management_model import ClassInfo
|
from model.class_management_model import ClassInfo
|
||||||
from sqlalchemy.orm import sessionmaker,Session
|
from sqlalchemy.orm import Session
|
||||||
from schema.class_management_request import ClassCreate, ClassUpdate
|
|
||||||
|
|
||||||
#查询
|
#查询
|
||||||
def get_class_dao(c,db):
|
def get_class_dao(c:dict,db:Session) :
|
||||||
q = db.query(ClassInfo)
|
q = db.query(ClassInfo).filter(ClassInfo.is_delete == 0)#is_delete=0代表未删除
|
||||||
if c.get('class_id'):
|
if c.get('class_id'):
|
||||||
q = q.filter(ClassInfo.class_id == c.get('class_id'))
|
q = q.filter(ClassInfo.class_id == c.get('class_id'))
|
||||||
if c.get('class_name'):
|
if c.get('class_name'):
|
||||||
@@ -18,20 +18,30 @@ def get_class_dao(c,db):
|
|||||||
if c.get('class_end_time'):
|
if c.get('class_end_time'):
|
||||||
q = q.filter(ClassInfo.class_end_time == c.get('class_end_time'))
|
q = q.filter(ClassInfo.class_end_time == c.get('class_end_time'))
|
||||||
c1 = q.all()
|
c1 = q.all()
|
||||||
if c1:
|
if not c1:
|
||||||
return[{'班级编号':i.class_id
|
return []
|
||||||
,'班级名称':i.class_name
|
return[
|
||||||
,'班主任':i.class_teacher
|
{'班级编号':i.class_id
|
||||||
,'授课老师':i.class_lecturer
|
,'班级名称':i.class_name
|
||||||
,'开课时间':i.class_start_time
|
,'班主任':i.class_teacher
|
||||||
,'结课时间':i.class_end_time
|
,'授课老师':i.class_lecturer
|
||||||
} for i in c1
|
,'开课时间':i.class_start_time
|
||||||
]
|
,'结课时间':i.class_end_time
|
||||||
|
} for i in c1
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
#新增
|
#新增
|
||||||
def add_class_dao(c,db):
|
def add_class_dao(c:dict,db:Session):
|
||||||
try:
|
try:
|
||||||
|
exist_class = db.query(ClassInfo)\
|
||||||
|
.filter(ClassInfo.class_name == c['class_name']
|
||||||
|
,ClassInfo.is_delete == 0)\
|
||||||
|
.first()
|
||||||
|
if exist_class:
|
||||||
|
msg = '班级名称已存在'
|
||||||
|
print(msg)
|
||||||
|
return [False,msg]
|
||||||
c1 = ClassInfo(**c)
|
c1 = ClassInfo(**c)
|
||||||
db.add(c1)
|
db.add(c1)
|
||||||
except:
|
except:
|
||||||
@@ -42,19 +52,26 @@ def add_class_dao(c,db):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
#修改
|
#修改
|
||||||
def update_class_dao(cname,update_data,db):
|
def update_class_dao(cid:int,update_data,db):
|
||||||
try:
|
try:
|
||||||
rows = db.query(ClassInfo).filter(ClassInfo.class_id == cname).update(update_data)
|
rows = db.query(ClassInfo)\
|
||||||
|
.filter(ClassInfo.class_id == cid
|
||||||
|
,ClassInfo.is_delete==0)\
|
||||||
|
.update(update_data)
|
||||||
except:
|
except:
|
||||||
db.rollback()
|
db.rollback()
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
db.commit()
|
db.commit()
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
|
|
||||||
#删除
|
#删除
|
||||||
def delete_class_dao(cid,db):
|
def delete_class_dao(cid,db):
|
||||||
try:
|
try:
|
||||||
rows = db.query(ClassInfo).filter(ClassInfo.class_id == cid).delete()
|
rows = db.query(ClassInfo)\
|
||||||
|
.filter(ClassInfo.class_id == cid,ClassInfo.is_delete==0)\
|
||||||
|
.update({'is_delete':1})
|
||||||
except:
|
except:
|
||||||
db.rollback()
|
db.rollback()
|
||||||
rows = 0
|
rows = 0
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ from fastapi import FastAPI,APIRouter
|
|||||||
from api.class_management_api import class_api
|
from api.class_management_api import class_api
|
||||||
from model.class_management_model import ClassInfo
|
from model.class_management_model import ClassInfo
|
||||||
from database import Base,engine
|
from database import Base,engine
|
||||||
|
import model
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
||||||
app.include_router(class_api)
|
app.include_router(class_api)
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ class ClassInfo(Base):
|
|||||||
,comment='结课日期'
|
,comment='结课日期'
|
||||||
)
|
)
|
||||||
is_delete = Column(Integer
|
is_delete = Column(Integer
|
||||||
,default=False
|
,default=0
|
||||||
,comment='逻辑删除 False未删除 True已删除'
|
,comment='逻辑删除 0未删除 1已删除'
|
||||||
)
|
)
|
||||||
create_time = Column(DATETIME
|
create_time = Column(DATETIME
|
||||||
,default=datetime.now
|
,default=datetime.now
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ from typing import Optional,List
|
|||||||
class ClassBase(BaseModel):
|
class ClassBase(BaseModel):
|
||||||
class_teacher:str|None = Field(None,description='班主任')
|
class_teacher:str|None = Field(None,description='班主任')
|
||||||
class_lecturer:str|None = Field(None,description='授课老师')
|
class_lecturer:str|None = Field(None,description='授课老师')
|
||||||
class_start_time:str|None = Field(None,description='开班日期')
|
class_start_time:date|None = Field(None,description='开班日期')
|
||||||
class_end_time:str|None = Field(None,description='结课日期')
|
class_end_time:date|None = Field(None,description='结课日期')
|
||||||
|
|
||||||
#新增班级请求体模型
|
#新增班级请求体模型
|
||||||
class ClassCreate(ClassBase):
|
class ClassCreate(ClassBase):
|
||||||
@@ -31,15 +31,12 @@ class ClassInfoResp(BaseModel):
|
|||||||
class Config:
|
class Config:
|
||||||
from_attributes = True
|
from_attributes = True
|
||||||
|
|
||||||
class ClassPageResp(BaseModel):
|
|
||||||
total:int
|
|
||||||
data:List[ClassInfoResp]
|
|
||||||
|
|
||||||
class ClassResponse(BaseModel):
|
class ClassResponse(BaseModel):
|
||||||
code:int = 200
|
code:int = 200
|
||||||
detail:str = 'OK'
|
detail:str = 'OK'
|
||||||
totals:int = 0
|
totals:int = 0
|
||||||
data:str|dict|tuple|list
|
data:str|dict|tuple|list
|
||||||
|
msg:str = 'OK'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user