Files
student_manage_system/students/dao/students_dao.py
T

185 lines
7.1 KiB
Python
Raw Normal View History

# student_dao:所有数据库的逻辑
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).filter(Students.is_deleted == False)
if s.get('id'):
q = q.filter( Students.id == s.get("id") )
if s.get('num'):
q = q.filter( Students.num == s.get("num") )
if s.get('name'):
q = q.filter( Students.name == s.get("name") )
if s.get('age'):
q = q.filter( Students.age == s.get("age") )
if s.get('sex'):
q = q.filter( Students.sex == s.get("sex") )
if s.get('home_Place'):
q = q.filter( Students.home_Place == s.get("home_Place") )
if s.get('college'):
q = q.filter( Students.college == s.get("college") )
if s.get('specialty'):
q = q.filter( Students.specialty == s.get("specialty") )
if s.get('enrollment_time'):
q = q.filter( Students.enrollment_time == s.get("enrollment_time") )
if s.get('graduate_time'):
q = q.filter( Students.graduate_time == s.get("graduate_time") )
if s.get('education'):
q = q.filter( Students.education == s.get("education") )
if s.get('class_id'):
q = q.filter(Students.class_id == s.get("class_id") )
if s.get('adnisor_id'):
q = q.filter(Students.adnisor_id == s.get("adnisor_id") )
if s.get('phone'):
q = q.filter(Students.phone == s.get("phone"))
s1 = q.all()
if s1:
return [{ 'id':i.id
, 'num':i.num
, 'name':i.name
, 'age':i.age
, 'sex':i.sex
, 'home_Place':i.home_Place
, 'college':i.college
, 'specialty':i.specialty
, 'enrollment_time':i.enrollment_time
, 'graduate_time':i.graduate_time
, 'education':i.education
# 外键字段
, 'class_id':i.class_id
, 'adnisor_id':i.adnisor_id
# 额外字段
, 'phone':i.phone
} for i in s1
]
# 新增
def add_student_dao( s , db):
try:
phone = s.get("phone")
s1_deleted = db.query( Students ).filter( Students.phone == phone ).first()
if s1_deleted and s1_deleted.is_deleted == False:
return False
if not phone:
return False
if s1_deleted and s1_deleted.is_deleted == True:
s1_deleted.name = s.get("name")
s1_deleted.age = s.get("age")
s1_deleted.sex = s.get("sex")
s1_deleted.home_Place = s.get("home_Place")
s1_deleted.college = s.get("college")
s1_deleted.specialty = s.get("specialty")
s1_deleted.enrollment_time = s.get("enrollment_time")
s1_deleted.graduate_time = s.get("graduate_time")
s1_deleted.education = s.get("education")
# 外键字段
s1_deleted.class_id = s.get("class_id")
s1_deleted.adnisor_id = s.get("adnisor_id")
# 额外字段
s1_deleted.phone = s.get("phone")
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)
return s1
# 更新
def update_student_dao( s , db):
try:
phone = s.get("student_phone")
if phone is not None and phone != '':
s1_con = db.query( Students ).filter( Students.phone == phone
,Students.id != s.get("id")
,Students.is_deleted == False ).first()
if s1_con:
return False
s1_id = db.query( Students ).filter( Students.id == s.get("id")
,Students.is_deleted == False ).first()
if not s1_id:
return False
if s.get("name") is not None:
s1_id.name = s.get("name")
if s.get("phone") is not None:
s1_id.student_phone = s.get("phone")
if s.get("class_name") is not None:
s1_id.class_name = s.get("class_name")
if s.get("job_open_time") is not None:
s1_id.job_open_time = s.get("job_open_time")
if s.get("offer_issue_time") is not None:
s1_id.offer_issue_time = s.get("offer_issue_time")
if s.get("company_name") is not None:
s1_id.company_name = s.get("company_name")
if s.get("salary") is not None:
s1_id.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:
if not any([s.get('sid')
,s.get("student_name")
,s.get("student_phone")
,s.get("class_name")
,s.get("job_open_time")
,s.get("offer_issue_time")
,s.get("company_name")
,s.get("salary")
]):
raise HTTPException(status_code=400, detail="输入需要删除的学生信息,删除条件任选,但不可全为空。")
q = db.query(Students).filter(Students.is_deleted == False)
if s.get('sid'):
q = q.filter(Students.sid == s.get("sid") )
if s.get('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.get("class_name") )
if s.get('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.get("offer_issue_time") )
if s.get('company_name'):
q = q.filter(Students.company_name == s.get("company_name") )
if s.get('salary'):
q = q.filter(Students.salary >= s.get("salary") )
s1_delete = q.all()
if not s1_delete:
raise HTTPException(status_code=404, detail="没有找到该学生。")
for i in s1_delete:
i.is_deleted = True
i.deleted_date = datetime.now()
s2_deleted =[{"sid":i.sid,"student_name":i.student_name,"student_phone":i.student_phone}for i in s1_delete]
except HTTPException:
raise
except Exception:
db.rollback()
raise HTTPException(status_code=500, detail="Internal server error")
else:
db.commit()
return s2_deleted