基础框架内容已经搭建完毕,剩余外键还未链接。

This commit is contained in:
Orangeeee
2026-09-21 12:20:53 +08:00
parent 1f4fa614e5
commit e9507fef26
4 changed files with 144 additions and 63 deletions
+24 -20
View File
@@ -8,52 +8,56 @@ from students.databases import *
students_api = APIRouter()
@students_api.get("/students/"
@students_api.get("/students"
,summary='学生资料查询'
,description='筛选条件全为空即查询所有学生资料,输入薪资会查询大于输入薪资以上的学生'
,response_model=StudentsQuery
,response_model=list[StudentsQuery]
)
def get_students( stu:StudentsQuery = Depends()
, db=Depends(get_db)
):
s_dick = stu.model_dump(exclude_unset=True)
result = get_student_dao( s=s_dick , db=db )
s_dict = stu.model_dump(exclude_unset=True) # 没值的不要
result = get_student_dao( s=s_dict , db=db )
if result:
return result
raise HTTPException(status_code=404, detail="没有找到符合条件的学生")
@students_api.post("/students/"
@students_api.post("/students"
,summary='新增学生资料'
,description='学生ID自动分配,学生姓名和班级是必填项'
,description='学生ID自动分配,学生姓名、学生手机号和班级是必填项,不能为空。'
,response_model=StudentsResponse )
def add_student( stu:StudentsResponse = Depends()
, db=Depends(get_db)
):
s_dick = stu.model_dump()
result = add_student_dao( s=s_dick , db=db )
s_dict = stu.model_dump(exclude_unset=True)
result = add_student_dao( s=s_dict , db=db )
if not result:
raise HTTPException(status_code=500, detail='服务器繁忙或用户不存在!')
raise HTTPException(status_code=500, detail='手机号已有学生使用或必填项为空。')
return result
@students_api.put("/students/"
@students_api.put("/students"
,summary='学生资料更新'
,description='填写即更新,全为空即不更新,学生ID无法修改'
,description='请输入需要更新信息的学生ID,学生手机号不可重复,填写即更新,为空即不更新。'
,response_model=StudentsUpdate )
def get_students( stu:StudentsUpdate = Depends()
, db=Depends(get_db)
):
s_dick = stu.model_dump()
s_dict = stu.model_dump(exclude_unset=True)
result = update_student_dao( s=s_dict , db=db )
if not result:
raise HTTPException(status_code=500, detail='手机号已有学生使用。')
return result
return '学生资料已更新'
@students_api.delete("/students/"
@students_api.delete("/students"
,summary='删除学生资料'
,description='输入需要删除的学生ID'
,response_model=StudentsDelete ) # 逻辑删除/软删除
,description='输入需要删除的学生信息,工资筛选能删除大于等于输入工资的所有人。'
,response_model=list[StudentsDelete] ) # 逻辑删除/软删除
def delete_students( stu:StudentsDelete = Depends()
, db=Depends(get_db)
):
s_dick = stu.model_dump()
return '学生已删除'
s_dict = stu.model_dump(exclude_unset=True)
result = add_student_dao(s=s_dict, db=db)
if not result:
raise HTTPException(status_code=500, detail='手机号已有学生使用。')
return result
+105 -37
View File
@@ -2,35 +2,37 @@
from students.model.students_model import Students
from students.schema.students_request import *
# 记得加校验
from fastapi import HTTPException
# 查询
def get_student_dao( s , db):
q = db.query(Students)
q = db.query(Students).filter(Students.is_deleted == False)
if s.get('sid'):
q = q.filter( Students.sid == s.sid )
q = q.filter( Students.sid == s.get("sid") )
if s.get('student_name'):
q = q.filter( Students.student_name == s.student_name )
q = q.filter( Students.student_name == s.get("student_name") )
if s.get('student_phone'):
q = q.filter(Students.student_phone == s.get("student_phone"))
if s.get('class_name'):
q = q.filter(Students.class_name == s.class_name)
q = q.filter(Students.class_name == s.get("class_name") )
if s.get('job_open_time'):
q = q.filter(Students.job_open_time == s.job_open_time)
q = q.filter(Students.job_open_time == s.get("job_open_time") )
if s.get('offer_issue_time'):
q = q.filter(Students.offer_issue_time == s.offer_issue_time)
q = q.filter(Students.offer_issue_time == s.get("offer_issue_time") )
if s.get('company_name'):
q = q.filter(Students.company_name == s.company_name)
q = q.filter(Students.company_name == s.get("company_name") )
if s.get('salary'):
q = q.filter(Students.salary >= s.salary)
q = q.filter(Students.salary >= s.get("salary") )
s1 = q.all()
if s1:
return [{ "学生编号": i.sid
, "学生姓名": i.student_name
, "学生班级": i.class_name
, "就业开放时间": i.job_open_time
, "offer下发时间": i.offer_issue_time
, "就业公司名称": i.company_name
, "就业薪资": i.salary
return [{ "sid": i.sid
, "student_name": i.student_name
, "student_phone":i.student_phone
, "class_name": i.class_name
, "job_open_time": i.job_open_time
, "offer_issue_time": i.offer_issue_time
, "company_name": i.company_name
, "salary": i.salary
} for i in s1
]
@@ -38,39 +40,105 @@ def get_student_dao( s , db):
def add_student_dao( s , db):
try:
phone = s.get("student_phone")
s1_deleted = db.query( Students ).filter( Students.student_phone == phone ).first()
if s1_deleted and s1_deleted.is_deleted == False:
return False
if not phone:
return None
else:
s1 = Students( **s )
db.add(s1)
return False
if s1_deleted and s1_deleted.is_deleted == True:
s1_deleted.student_name = s.get("student_name")
s1_deleted.student_phone = s.get("student_phone")
s1_deleted.class_name = s.get("class_name")
s1_deleted.job_open_time = s.get("job_open_time")
s1_deleted.offer_issue_time = s.get("offer_issue_time")
s1_deleted.company_name = s.get("company_name")
s1_deleted.salary = s.get("salary")
s1_deleted.create_date = datetime.now()
s1_deleted.update_date = datetime.now()
s1_deleted.is_deleted = False
s1_deleted.deleted_date = None
db.commit()
db.refresh(s1_deleted) # 从数据库再拉一次数据
return s1_deleted
s1 = Students( **s )
db.add(s1)
except Exception:
# 这里可以加日志
db.rollback()
return False
else:
db.commit()
db.refresh(s1) # 从数据库再拉一次数据
db.refresh(s1)
return s1
# 更新
def update_student_dao( id , update_data , db):
def update_student_dao( s , db):
try:
rows = db.query( Students ).filter( Students.sid == id ).update( update_data )
phone = s.get("student_phone")
if phone is not None and phone != '':
s1_con = db.query( Students ).filter( Students.student_phone == phone
,Students.sid != s.get("sid")
,Students.is_deleted == False ).first()
if s1_con:
return False
s1_sid = db.query( Students ).filter( Students.sid == s.get("sid")
,Students.is_deleted == False ).first()
if not s1_sid:
return False
if s.get("student_name") is not None:
s1_sid.student_name = s.get("student_name")
if s.get("student_phone") is not None:
s1_sid.student_phone = s.get("student_phone")
if s.get("class_name") is not None:
s1_sid.class_name = s.get("class_name")
if s.get("job_open_time") is not None:
s1_sid.job_open_time = s.get("job_open_time")
if s.get("offer_issue_time") is not None:
s1_sid.offer_issue_time = s.get("offer_issue_time")
if s.get("company_name") is not None:
s1_sid.company_name = s.get("company_name")
if s.get("salary") is not None:
s1_sid.salary = s.get("salary")
except Exception:
db.rollback()
return False
else:
s1_sid.update_date = datetime.now()
db.commit()
db.refresh(s1_sid) # 从数据库再拉一次数据
return s1_sid
# 逻辑删除/软删除
def delete_student_dao( s , db):
try:
q = db.query(Students).filter(Students.is_deleted == False)
if s.get('sid'):
q = q.filter(Students.sid == s.sid)
if s.get('student_name'):
q = q.filter(Students.student_name == s.student_name)
if s.get("student_phone"):
q = q.filter(Students.student_phone == s.student_phone)
if s.get('class_name'):
q = q.filter(Students.class_name == s.class_name)
if s.get('job_open_time'):
q = q.filter(Students.job_open_time == s.job_open_time)
if s.get('offer_issue_time'):
q = q.filter(Students.offer_issue_time == s.offer_issue_time)
if s.get('company_name'):
q = q.filter(Students.company_name == s.company_name)
if s.get('salary'):
q = q.filter(Students.salary >= s.salary)
s1_delete = q.all()
if not s1_delete:
raise HTTPException(status_code=404, detail="Student not found")
for i in s1_delete:
i.is_deleted = True
i.deleted_date = datetime.now()
s2_deleted =[{"删除的学生ID":i.sid,"删除的学生姓名":i.student_name,"删除的学生电话":i.student_phone}for i in s1_delete]
except Exception:
db.rollback()
return False
else:
db.commit()
return f"更新了{rows}条学生资料。"
# 逻辑删除/软删除
def delete_student_dao(sid, db):
try:
rows = db.query( Students ).filter( Students.sid == sid ).delete()
except Exception:
db.rollback()
rows = 0
else:
db.commit()
finally:
return f"删除了{rows}条学生资料。"
return s2_deleted
+14 -6
View File
@@ -1,6 +1,6 @@
# students_schema:请求、响应的模型框架
from pydantic import BaseModel
from pydantic import BaseModel , Field , field_validator
from datetime import datetime
# 查询
@@ -16,9 +16,9 @@ class StudentsQuery(BaseModel):
# 新建
class StudentsResponse(BaseModel):
student_name:str
class_name:str
student_phone:str
student_name:str = Field(...,min_length=1)
student_phone:str = Field(...,min_length=11,max_length=11)
class_name:str = Field(...,min_length=1)
job_open_time:datetime | None = None
offer_issue_time:datetime | None = None
company_name:str | None = None
@@ -26,9 +26,10 @@ class StudentsResponse(BaseModel):
# 更新
class StudentsUpdate(BaseModel):
sid:int = Field(...,gt=0)
student_name:str | None = None
class_name:str | None = None
student_phone: str | None = None
class_name:str | None = None
job_open_time:datetime | None = None
offer_issue_time:datetime | None = None
company_name:str | None = None
@@ -36,4 +37,11 @@ class StudentsUpdate(BaseModel):
# 删除
class StudentsDelete(BaseModel):
sid:int
sid:int | None = None
student_name:str | None = None
student_phone: str | None = None
class_name:str | None = None
job_open_time:datetime | None = None
offer_issue_time:datetime | None = None
company_name:str | None = None
salary:int | None = None