Files
2026-09-21 19:22:31 +08:00

59 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 从 sqlalchemy 库导入 create_engine,用于创建数据库连接引擎
from sqlalchemy import Column, Integer, String, ForeignKey, Table,Date
from sqlalchemy.orm import relationship
from database import Base
#=============== 多对多中间表1:老师 ↔ 班级 ===============
teacher_class = Table(
"teacher_class", # 中间表名
Base.metadata, # 绑定到 Base 的元数据
#两个外键,共同组成联合主键,防止重复绑定同一个老师班级
Column("tid",Integer,ForeignKey("teacher.tid"),primary_key=True), # 老师ID,外键指向老师表,同时是组合主键的一部分
Column("cid",Integer,ForeignKey("classes.cid"),primary_key=True), # 班级ID,外键指向班级表,同时是组合主键的一部分
)
#=============== 多对多中间表2: 老师 ↔ 学生 ===============
teacher_student = Table(
"teacher_student", # 中间表名
Base.metadata, # 绑定到 Base 的元数据
#两个外键,共同组成联合主键,防止重复绑定同一个老师学生
Column("tid",Integer,ForeignKey("teacher.tid"),primary_key=True),# 老师ID,外键指向老师表,同时是组合主键的一部分
Column("sid",Integer,ForeignKey("student.sid"),primary_key=True),# 学生ID,外键指向学生表,同时是组合主键的一部分
)
#=============== 老师主表 ===============
class Teacher(Base):
__tablename__ = "teacher" #数据库中对应表名
tid = Column(Integer, primary_key=True, autoincrement=True) #主键:老师编号,自增。
t_name = Column(String(20), nullable=False) #老师名字,非空,最大20个字符
phone = Column(String(11), unique=True) #手机号,唯一
subject = Column(String(20)) #授课科目,默认值为“班主任”
entry_time = Column(Date) #入职时间
is_deleted = Column(Integer, default=1) #逻辑删除,0=已删除,1=未删除
#=============== 关联关系定义 ==========
# secondary=中间表:指定通过哪张中间表关联
# back_populates:反向关联,和Class表中的teachers对应,实现双向查询
# 多对多:一个老师对应多个班级
classes = relationship("Classes", secondary=teacher_class, back_populates="teachers")
# 多对多:一个老师对应多个学生
students = relationship("Student", secondary=teacher_student, back_populates="teachers")