霍格沃兹测试开发学社 ceshiren.com
# 创建一个中间表
teacher_student_rel = db.Table(
# 中间表的名字,最好能体现哪两张表
"teacher_student",
# 其中一张表的描述,作为一个外键,指向 teacher 表的id
Column("teacher_id", Integer, \
ForeignKey("teacher.id"), \
nullable=False, primary_key=True),
# 其中一张表的描述,作为一个外键,指向 student 表的id
Column("student_id", Integer, ForeignKey("student.id"), \
nullable=False, primary_key=True)
)
# 创建老师的映射
class Teacher(db.Model):
__tablename__ = "teacher"
id = Column(Integer, primary_key=True)
# name 老师的姓名
# nullable=False 不为空,unique=True 唯一约束,不允许重复
name = Column(String(100), nullable=False, unique=True)
# 参数一:指向另一张表,另外一张表的类名
# 参数二:secondary ,指向中间表的变量名
# 参数三:反向指向,backref 当前表的别名
students = relationship("Student",\
secondary=teacher_student_rel,
backref= "teachers")
def __repr__(self):
return "<Teacher id='%s' \
teacher_name='%s'>" % (self.id, self.name)
# 创建学生的映射
class Student(db.Model):
__tablename__ = "student"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(100),nullable=False,unique=True)
def __repr__(self):
return f"<Student id='{self.id}' name='{self.name}'>"
if __name__ == '__main__':
# 建表
# db.create_all()
# db.drop_all()
# ======== 添加数据 =========
# 添加三个学生,三个老师
stu1 = Student(name="学生1")
stu2 = Student(name="学生2")
stu3 = Student(name="学生3")
tea1 = Teacher(name="老师1")
tea2 = Teacher(name="老师2")
tea3 = Teacher(name="老师3")
db.session.add_all([stu1,stu2,stu3,tea1,tea2,tea3])
# 建立关联关系
# 老师1 --关联-- 学生1,学生2
# 老师2 --关联-- 学生2,学生3
tea1.students = [stu1,stu2]
tea2.students = [stu2,stu3]
db.session.commit()
db.session.close()