# 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('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 = q.all() if s1: 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 ] # 新增 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 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) 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.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: 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