Files
1/dao/wl_student_dao.py
T

78 lines
2.4 KiB
Python
Raw Normal View History

2026-09-12 16:30:43 +08:00
from sqlalchemy.orm import Session
from sqlalchemy import func
2026-09-12 20:55:36 +08:00
from model.wl_student_model import student
from model.wl_class_model import Class # 你同学写的
2026-09-12 16:30:43 +08:00
from scheme.wl_student_scheme import StudentCreate, StudentUpdate
# ---- 学号生成 ----
def generate_stu_no(db: Session, class_id: int, seq: int = None) -> str:
2026-09-12 20:55:36 +08:00
#非测试就解除下面5行测试,注释date_str = "20260912"
# cls = db.query(class_).filter_by(class_id=class_id).first()
# if not cls or not cls.start_time:
# raise ValueError("班级不存在或未设置开班时间")
# date_str = cls.start_time.strftime("%Y%m%d")
# 直接写死一个日期字符串用于测试
date_str = "20260912"
2026-09-12 16:30:43 +08:00
if seq is None:
2026-09-12 20:55:36 +08:00
count = db.query(func.count(student.stu_id)) \
.filter(student.class_id == class_id).scalar() or 0
2026-09-12 16:30:43 +08:00
seq = count + 1
return f"{date_str}{seq:03d}"
# ---- 增 ----
2026-09-12 20:55:36 +08:00
def create_student(db: Session, data: StudentCreate) -> student:
2026-09-12 16:30:43 +08:00
stu_no = generate_stu_no(db, data.class_id)
2026-09-12 20:55:36 +08:00
stu = student(stu_no=stu_no, **data.model_dump())
2026-09-12 16:30:43 +08:00
db.add(stu)
db.commit()
db.refresh(stu)
return stu
# ---- 查(多条件)----
def search_students(db: Session, stu_no=None, stu_name=None,
class_id=None, advisor_id=None, status=None):
2026-09-12 20:55:36 +08:00
q = db.query(student).filter(student.is_deleted == 0) # 若加了逻辑删除字段
2026-09-12 16:30:43 +08:00
if stu_no:
2026-09-12 20:55:36 +08:00
q = q.filter(student.stu_no.like(f"%{stu_no}%"))
2026-09-12 16:30:43 +08:00
if stu_name:
2026-09-12 20:55:36 +08:00
q = q.filter(student.stu_name.like(f"%{stu_name}%"))
2026-09-12 16:30:43 +08:00
if class_id:
2026-09-12 20:55:36 +08:00
q = q.filter(student.class_id == class_id)
2026-09-12 16:30:43 +08:00
if advisor_id:
2026-09-12 20:55:36 +08:00
q = q.filter(student.advisor_id == advisor_id)
2026-09-12 16:30:43 +08:00
if status:
2026-09-12 20:55:36 +08:00
q = q.filter(student.status == status)
2026-09-12 16:30:43 +08:00
return q.all()
2026-09-12 20:55:36 +08:00
def get_student_by_no(db: Session, stu_no: str) -> student | None:
return db.query(student).filter(
student.stu_no == stu_no,
student.is_deleted == 0
2026-09-12 16:30:43 +08:00
).first()
# ---- 改 ----
2026-09-12 20:55:36 +08:00
def update_student(db: Session, stu_no: str, data: StudentUpdate) -> student | None:
2026-09-12 16:30:43 +08:00
stu = get_student_by_no(db, stu_no)
if not stu:
return None
for k, v in data.model_dump(exclude_unset=True).items():
setattr(stu, k, v)
db.commit()
db.refresh(stu)
return stu
# ---- 逻辑删 ----
def delete_student(db: Session, stu_no: str) -> bool:
stu = get_student_by_no(db, stu_no)
if not stu:
return False
stu.is_deleted = 1
db.commit()
return True