# 在开发过程中需要使用 ORM 模型将表与表的多对多关联关系使用代码描述出来。多对多关系描述有一个唯一的点就是:
#   需要添加一张单独的表去记录两张表之间的对应关系


# 定义模型及表

tb_student_course = db.Table('tb_student_course',

                             db.Column('student_id', db.Integer, db.ForeignKey('students.id')),

                             db.Column('course_id', db.Integer, db.ForeignKey('courses.id'))

                             )



class Student(db.Model):

    __tablename__ = "students"

    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.String(64), unique=True)


    courses = db.relationship('Course', secondary=tb_student_course,

                              backref='student',

                              lazy='dynamic')



class Course(db.Model):

    __tablename__ = "courses"

    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.String(64), unique=True)


# 添加测试数据

if __name__ == '__main__':

    db.drop_all()

    db.create_all()


    # 添加测试数据


    stu1 = Student(name='张三')

    stu2 = Student(name='李四')

    stu3 = Student(name='王五')


    cou1 = Course(name='物理')

    cou2 = Course(name='化学')

    cou3 = Course(name='生物')


    stu1.courses = [cou2, cou3]

    stu2.courses = [cou2]

    stu3.courses = [cou1, cou2, cou3]


    db.session.add_all([stu1, stu2, stu2])

    db.session.add_all([cou1, cou2, cou3])


    db.session.commit()


    app.run(debug=True)