增加多字段查询

This commit is contained in:
2026-09-21 19:33:53 +08:00
parent 5344109ff7
commit db3983f174
5 changed files with 76 additions and 29 deletions
+36 -4
View File
@@ -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
View File
@@ -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
+1
View File
@@ -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)
+2 -2
View File
@@ -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
+3 -6
View File
@@ -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'