# 从 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")