第一版_完整

This commit is contained in:
jianqi
2026-09-14 11:34:08 +08:00
parent e8646724b4
commit 414de4bad8
26 changed files with 1422 additions and 307 deletions
+23
View File
@@ -0,0 +1,23 @@
# model/__init__.py
# 这个文件不是「模型之间互相导入」,而是「聚合入口」,单向扇出,不成环
from database import Base
from model.advisor_model import AdvisorInfo
from model.cls_mgmt_model import ClsMgmt
from model.employ_model import StudentEmployManage
from model.stu_model import StuInfo
from model.stu_score_model import StuScore
from model.teacher_model import Teacher
from model.users import User
__all__ = [
"Base",
"AdvisorInfo",
"ClsMgmt",
"StudentEmployManage",
"StuInfo",
"StuScore",
"Teacher",
"User",
]
+15
View File
@@ -0,0 +1,15 @@
# model/advisor_model.py
from sqlalchemy import Column, String, Integer
from sqlalchemy.orm import relationship
from database import Base
class AdvisorInfo(Base):
__tablename__ = "advisor_info"
id = Column(String(15), primary_key=True)
name = Column(String(20), nullable=False)
phone = Column(String(20), nullable=False)
is_deleted = Column(Integer, nullable=False, default=0)
students = relationship("StuInfo", back_populates="adv")
+19 -9
View File
@@ -1,7 +1,9 @@
from sqlalchemy import Column, Integer, String, DateTime, Date
from sqlalchemy import Column, Integer, String, DateTime, Date, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from database import Base
class ClsMgmt(Base):
"""
班级管理表模型
@@ -12,11 +14,19 @@ class ClsMgmt(Base):
# 字段定义
id = Column(String(15), primary_key=True, nullable=False) # 班级编号,主键,非空
cls_start_date= Column(Date, nullable=False) #开课时间
head_tea_id =Column(String(15),nullable=False) # 班主任id
lecturer_id=Column(String(15),nullable=False) # 主讲老师id
is_deleted=Column(Integer,nullable=False)
# created_at:创建时间,自动设置为当前时间(服务器时间)
# server_default=func.now() 表示由数据库生成默认值
created_at = Column(DateTime(timezone=True), server_default=func.now())
# updated_at:更新时间,当记录更新时自动设置为当前时间(由 SQLAlchemy 的 onupdate 触发)
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
head_tea_id =Column(String(15), ForeignKey("tea_info.id"),nullable=False) # 班主任id
lecturer_id=Column(String(15), ForeignKey("tea_info.id"),nullable=False) # 主讲老师id
is_deleted=Column(Integer,nullable=False, default=0)
stu = relationship("StuInfo",back_populates="cls")
head_teacher = relationship("Teacher",
foreign_keys=[head_tea_id],
back_populates="head_classes")
lecturer = relationship("Teacher",
foreign_keys=[lecturer_id],
back_populates="lecturer_classes")
+36
View File
@@ -0,0 +1,36 @@
# model/employ_model.py
# 本文件定义 stu_emp_mgmt 表的结构,映射到 MySQL 数据库
# author:王博
from sqlalchemy import Column, String, Date, Integer, ForeignKey, DECIMAL
from sqlalchemy.orm import relationship
from database import Base
class StudentEmployManage(Base):
"""
学生就业管理表 的映射 模型表
对应 MYSQL 中的 stu_emp_mgmt 表
"""
__tablename__ = 'stu_emp_mgmt'
stu_id = Column(String(15),ForeignKey('stu_info.id'),primary_key=True,nullable=False,) # 主键 索引
emp_open_time = Column(Date,nullable=True,default=None) # 就业开放时间
send_offer_time = Column(Date, nullable=True,default=None) # 收到Offer时间
emp_company = Column(String(50),nullable=True,default=None) # 就业公司名称
salary = Column(DECIMAL(10,2),nullable=True,default=None) # 薪资待遇(月薪/元),共10位数,最多两位小数
is_deleted = Column(Integer, nullable=False,default=0) # 软删除: 0-正常 1-已删除
stu = relationship('StuInfo',back_populates="stu_emp_mgmt") # 与学生信息表一对一关联,stu为 学生就业管理表 的 学生属性
def __repr__(self):
"""
返回对象时,自定义 返回的对象信息
:return:
"""
return (f'<EmployStatus'
f'("学生编号"={self.stu_id},'
f'"就业开放时间"={self.emp_open_time},'
f'"offer下发时间"={self.send_offer_time},'
f'"就业公司名称"{self.emp_company}:,'
f'"就业薪资":{self.salary})>')
+15 -4
View File
@@ -4,8 +4,9 @@ from database import Base
#学生信息表模型
class StuInfo(Base):
__tablename__="stu_info"
id = Column(String(15),primary_key=True)
cls_id=Column(String(15),ForeignKey(cls_mgmt.id),nullable=False)
cls_id=Column(String(15),ForeignKey("cls_mgmt.id"),nullable=False)
name=Column(String(20),nullable=False)
gender=Column(String(1),default="男")
age=Column(Integer,default=None)
@@ -15,8 +16,18 @@ class StuInfo(Base):
education=Column(String(20),default=None)
enr_date=Column(Date,default=None)
grad_date = Column(Date, default=None)
advisor_id=Column(String(15),ForeignKey(advisor_info.id),default=None)
advisor_id=Column(String(15),ForeignKey("advisor_info.id"),default=None)
state=Column(String(10),default="在读")
is_deleted=Column(Integer,default=0)
is_deleted=Column(Integer, nullable=False, default=0)
cls=relationship("ClsMgmt",back_populates="stu")
adv=relationship("AdvisorInfo",back_populates="stu")
score = relationship("StuScore",back_populates="student")
adv = relationship("AdvisorInfo", back_populates="students")
stu_emp_mgmt = relationship(
"StudentEmployManage",
back_populates="stu",
uselist=False,
)
+9 -13
View File
@@ -2,11 +2,12 @@
# 本文件定义 User 表的结构,映射到 MySQL 数据库
from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey
from sqlalchemy.dialects.mysql import DECIMAL
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from database import Base
class Stu_score(Base):
class StuScore(Base):
"""
用户表模型
对应 MySQL 中的 users 表
@@ -15,20 +16,15 @@ class Stu_score(Base):
# 字段定义
id = Column(Integer,primary_key=True, nullable=False,autoincrement=True) #
# stu_id = Column(String(10),ForeignKey(stu_info.id),nullable=False) #学生id,非空
exam_attempt = Column(Integer, nullable=False) # 考试轮次,非空
exam_score = Column(Integer, nullable=False,) # 成绩,非空,设置范围
score_level=Column(String(10),nullable=False) #成绩评级
stu_id = Column(String(15),ForeignKey("stu_info.id"),nullable=False) #学生id,非空
exam_attempt = Column(Integer, nullable=False, default= 1) # 考试轮次,非空
exam_score = Column(DECIMAL(5, 2), nullable=False,) # 成绩,非空,设置范围
score_level=Column(String(10),nullable=False, default="普通") #成绩评级
is_deleted=Column(Boolean,default=False,nullable=False) #软删除: 0-正常 1-已删除
name = relationship("Stu_info", back_populates="score")
student = relationship("StuInfo", back_populates="score")
def __repr__(self):
return (f"<Stu_info(id={self.stu_id}, exam_attempt='{self.exam_attempt}'"
f"exam_score={self.exam_score}, score_level='{self.score_level}'"
f"is_deleted={self.is_deleted})>")
# created_at:创建时间,自动设置为当前时间(服务器时间)
# server_default=func.now() 表示由数据库生成默认值
created_at = Column(DateTime(timezone=True), server_default=func.now())
# updated_at:更新时间,当记录更新时自动设置为当前时间(由 SQLAlchemy 的 onupdate 触发)
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
f"is_deleted={self.is_deleted})>")
+12 -3
View File
@@ -1,17 +1,26 @@
#教师建表语句
from sqlalchemy import Column, String, Integer
from sqlalchemy.orm import relationship
from database import Base
class Teacher(Base):
__tablename__ = "ted_info" # 表名
__tablename__ = "tea_info" # 表名
# 字段定义
id = Column(Integer, primary_key=True, index=True) # 主键,索引
id = Column(String(15), primary_key=True, index=True) # 主键,索引
name = Column(String(20),nullable=False) # 用户名,非空
phone = Column(String(20),unique=True,nullable=False) # 电话,唯一,非空
type = Column(String(20), nullable=False) # 教师职位,非空
is_deleted = Column(Integer, default=0) # 逻辑删除(软删除),0是未删除,1是删除,默认为0
is_deleted = Column(Integer, nullable=False, default=0) # 逻辑删除(软删除),0是未删除,1是删除,默认为0
head_classes = relationship("ClsMgmt",
foreign_keys="ClsMgmt.head_tea_id",
back_populates="head_teacher")
lecturer_classes = relationship("ClsMgmt",
foreign_keys="ClsMgmt.lecturer_id",
back_populates="lecturer")
-26
View File
@@ -1,26 +0,0 @@
# model/users.py
# 本文件定义 User 表的结构,映射到 MySQL 数据库
from sqlalchemy import Column, Integer, String, DateTime
from sqlalchemy.sql import func
from database import Base
class User(Base):
"""
用户表模型
对应 MySQL 中的 users 表
"""
__tablename__ = "users" # 表名
# 字段定义
id = Column(Integer, primary_key=True, index=True) # 主键,自增,索引
username = Column(String(50), unique=True, index=True, nullable=False) # 用户名,唯一,非空
email = Column(String(100), unique=True, index=True, nullable=False) # 邮箱,唯一,非空
full_name = Column(String(100), nullable=True) # 全名,可为空
# created_at:创建时间,自动设置为当前时间(服务器时间)
# server_default=func.now() 表示由数据库生成默认值
created_at = Column(DateTime(timezone=True), server_default=func.now())
# updated_at:更新时间,当记录更新时自动设置为当前时间(由 SQLAlchemy 的 onupdate 触发)
updated_at = Column(DateTime(timezone=True), onupdate=func.now())