学生管理模块&就业模块
This commit is contained in:
+1
-50
@@ -70,53 +70,4 @@ class StudentClassIntermediate(Base):
|
||||
student_id =Column(String(20))
|
||||
is_deleted= Column(Integer)
|
||||
create_time= Column(DateTime)
|
||||
update_time= Column(DateTime)
|
||||
|
||||
|
||||
|
||||
|
||||
class GenderEnum(str, enum.Enum):
|
||||
FEMALE = '0'
|
||||
MALE = '1'
|
||||
|
||||
class StudentStatusEnum(str, enum.Enum):
|
||||
NORMAL = '0' # 正常
|
||||
SUSPENDED = '1' # 休学
|
||||
DROPPED = '2' # 退学
|
||||
GRADUATED = '3' # 毕业
|
||||
OTHER = '4' # 其他
|
||||
|
||||
class EducationLevelEnum(str, enum.Enum):
|
||||
COLLEGE = '1' # 大专
|
||||
UNDERGRADUATE = '2' # 本科
|
||||
MASTER = '3' # 硕士
|
||||
DOCTOR = '4' # 博士
|
||||
|
||||
class IsDeletedEnum(str, enum.Enum):
|
||||
ACTIVE = '0' # 未删除
|
||||
DELETED = '1' # 已删除
|
||||
|
||||
# 3. 定义学生模型类
|
||||
class Student_info(Base):
|
||||
__tablename__ = "student_info"
|
||||
student_id = Column(String(20),primary_key=True, comment='学号')
|
||||
student_name = Column(String(50), nullable=False, comment='学生姓名')
|
||||
gender = Column(Enum(GenderEnum), nullable=False, comment='性别: 0=女, 1=男')
|
||||
id_card = Column(String(18), nullable=False, comment='身份证号码,收紧至18位')
|
||||
birthday = Column(Date, nullable=True, comment='出生日期')
|
||||
ethnicity = Column(String(20), nullable=True, comment='民族')
|
||||
region_id = Column(String(12), nullable=True, comment='籍贯地区编码,外键关联地区维度表(region_dimension)')
|
||||
phone = Column(String(11), nullable=True, comment='手机号码,收紧至11位')
|
||||
graduation_school = Column(String(20), nullable=True, comment='毕业学校')
|
||||
major = Column(String(20), nullable=False, comment='就读专业')
|
||||
class_id = Column(String(20), nullable=False, index=True, comment='所在班级,外键关联班级表(class_info)')
|
||||
enrollment_date = Column(Date, nullable=True, comment='入学日期')
|
||||
graduation_date = Column(Date, nullable=True, comment='毕业日期')
|
||||
student_status = Column(Enum(StudentStatusEnum), nullable=False, default=StudentStatusEnum.NORMAL,
|
||||
comment='学籍状态')
|
||||
education_level = Column(Enum(EducationLevelEnum), nullable=False,
|
||||
comment='学历层次:1=大专, 2=本科, 3=硕士研究生, 4=博士研究生')
|
||||
is_deleted = Column(Enum(IsDeletedEnum), nullable=False, default=IsDeletedEnum.ACTIVE,
|
||||
comment='逻辑删除:0=未删除, 1=已删除')
|
||||
create_time = Column(DateTime, nullable=False, server_default=func.now(), comment='创建时间')
|
||||
update_time = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now(), comment='更新时间')
|
||||
update_time= Column(DateTime)
|
||||
@@ -0,0 +1,95 @@
|
||||
# 从 database 模块导入 Base(ORM 基类)和 engine(数据库引擎,别名为 db_engine)
|
||||
from database import Base, engine as db_engine
|
||||
|
||||
# 从 sqlalchemy 导入 Enum,并别名为 SAEnum,用于定义数据库枚举列
|
||||
from sqlalchemy import Enum as SAEnum, Integer
|
||||
|
||||
# 从 sqlalchemy 导入常用组件:inspect(检查表是否存在)、Column(列)、
|
||||
# VARCHAR/BIGINT/Date/DateTime(字段类型)、func(SQL 函数,如 now())
|
||||
from sqlalchemy import inspect, Column, VARCHAR, BIGINT, Date, DateTime, func
|
||||
|
||||
# 从自定义枚举模块导入学生状态、性别、学历层次、逻辑删除枚举
|
||||
from enums import StudentStatusEnum, GenderEnum, EducationLevelEnum, IsDeletedEnum
|
||||
|
||||
|
||||
def _sa_enum(e):
|
||||
"""
|
||||
统一让 SQLAlchemy 存枚举的 value 而不是 name。
|
||||
默认 SQLAlchemy 的 Enum 存的是枚举成员名(如 'male'),
|
||||
这里通过 values_callable 指定存枚举的值(如 '1'、'0')。
|
||||
"""
|
||||
return SAEnum(e, values_callable=lambda x: [m.value for m in x])
|
||||
|
||||
# ======================== 学生 ==========================
|
||||
# 学生信息表模型,继承 Base(declarative_base 生成的基类)
|
||||
class Student_info(Base):
|
||||
__tablename__ = 'student_info' # 数据库表名
|
||||
# 表参数:指定字符集和排序规则为 utf8mb4
|
||||
__table_args__ = {'mysql_charset': 'utf8mb4', 'mysql_collate': 'utf8mb4_general_ci'}
|
||||
|
||||
# 学号,主键,非空,长度 20
|
||||
student_id = Column(VARCHAR(20), primary_key=True, nullable=False, comment='学号,收紧长度')
|
||||
# 学生姓名,非空,长度 50
|
||||
student_name = Column(VARCHAR(50), nullable=False, comment='学生姓名')
|
||||
# 性别,枚举类型(存 value:'0'=女,'1'=男),非空
|
||||
gender = Column(Integer, nullable=False, comment='性别:0=女,1=男')
|
||||
# 身份证号码,唯一,非空,长度 18
|
||||
id_card = Column(VARCHAR(18), unique=True, nullable=False, comment='身份证号码,收紧至18位')
|
||||
# 出生日期,可空
|
||||
birthday = Column(Date, nullable=True, comment='出生日期')
|
||||
# 民族,可空,长度 20
|
||||
ethnicity = Column(VARCHAR(20), nullable=True, comment='民族')
|
||||
# 籍贯地区编码,可空,带索引(注释说外键关联 region_dimension,但模型里未定义 ForeignKey)
|
||||
region_id = Column(VARCHAR(12), nullable=True, index=True,
|
||||
comment='籍贯地区编码,外键关联地区维度表(region_dimension)')
|
||||
# 手机号码,可空,长度 11
|
||||
phone = Column(VARCHAR(11), nullable=True, comment='手机号码,收紧至11位')
|
||||
# 毕业学校,可空,长度 20
|
||||
graduation_school = Column(VARCHAR(20), nullable=True, comment='毕业学校')
|
||||
# 就读专业,非空,长度 20
|
||||
major = Column(VARCHAR(20), nullable=False, comment='就读专业')
|
||||
# 所在班级,非空,长度 20,带索引(注释说外键关联 class_info,但模型里未定义 ForeignKey)
|
||||
class_id = Column(VARCHAR(20), nullable=False, index=True, comment='所在班级,外键关联班级表(class_info)')
|
||||
# 入学日期,可空
|
||||
enrollment_date = Column(Date, nullable=True, comment='入学日期')
|
||||
# 毕业日期,可空
|
||||
graduation_date = Column(Date, nullable=True, comment='毕业日期')
|
||||
# 学籍状态,枚举,非空:0=在读,1=休学,2=退学,3=毕业,4=结业
|
||||
student_status = Column(Integer, nullable=False,comment='学籍状态:0=在读,1=休学,2=退学,3=毕业,4=结业')
|
||||
# 学历层次,枚举,非空:1=大专,2=本科,3=硕士研究生,4=博士研究生
|
||||
education_level = Column(Integer, nullable=False,comment='学历层次:1=大专,2=本科,3=硕士研究生,4=博士研究生')
|
||||
# 逻辑删除标志,枚举,非空,默认值为 IsDeletedEnum.no('0'=未删除)
|
||||
is_deleted = Column(Integer, default=IsDeletedEnum.no, nullable=False,comment='逻辑删除:0=未删除,1=已删除')
|
||||
# 创建时间,非空,服务器默认值为当前时间(数据库端生成)
|
||||
create_time = Column(DateTime, nullable=False, server_default=func.now(), comment='创建时间')
|
||||
# 更新时间,非空,服务器默认值为当前时间,更新时自动刷新为当前时间
|
||||
update_time = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now(),
|
||||
comment='更新时间')
|
||||
|
||||
# ======================== 地区 ==========================
|
||||
# 地区维度表模型
|
||||
class Region_dimension(Base):
|
||||
__tablename__ = 'region_dimension' # 表名
|
||||
# 表参数:utf8mb4 字符集
|
||||
__table_args__ = {'mysql_charset': 'utf8mb4', 'mysql_collate': 'utf8mb4_general_ci'}
|
||||
|
||||
# 自增主键,BIGINT 类型
|
||||
id = Column(BIGINT, primary_key=True, autoincrement=True, comment='自增主键')
|
||||
# 地区编码,唯一,非空,长度 12
|
||||
code = Column(VARCHAR(12), unique=True, nullable=False, comment='地区编码')
|
||||
# 省 / 直辖市,非空
|
||||
province = Column(VARCHAR, nullable=False, comment='省 / 直辖市')
|
||||
# 市,非空
|
||||
city = Column(VARCHAR, nullable=False, comment='市')
|
||||
# 区 / 县,非空
|
||||
district = Column(VARCHAR, nullable=False, comment='区 / 县')
|
||||
|
||||
|
||||
# 判断表是否存在,不存在则创建表
|
||||
# 检查 student_info 表是否存在
|
||||
if not inspect(db_engine).has_table('student_info'):
|
||||
# 创建所有继承 Base 的表(此处会创建 student_info 和 region_dimension)
|
||||
Base.metadata.create_all(db_engine)
|
||||
# 检查 region_dimension 表是否存在
|
||||
if not inspect(db_engine).has_table('region_dimension'):
|
||||
Base.metadata.create_all(db_engine)
|
||||
Reference in New Issue
Block a user