模型
# 学生和课程多对多
class Student(db.Model):
__tablename__ = "students"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
relate_courses = db.relationship('Course', secondary=student_course,
backref='relate_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)
student_course = db.Table('student_course',
db.Column('student_id', db.Integer, db.ForeignKey('students.id')),
db.Column('course_id', db.Integer, db.ForeignKey('courses.id'))
)
第三张表的sql语句:
create table student_course(
student_id int not null,
course_id int not null,
primary key(student_id, course_id)
)
查询和修改都简单
1、查学生 “张三” 所选的课程
course_list = Student.query.filter_by(name='张三').first().relate_course.all()
2、同理 查选 “语文” 的学生
student_list = Course.query.filter_by(name='语文').first().relate_course.all()
3、修改:定位obj——>修改
# 把 张三 选的语文课改成 物理
course_list = Student.query.filter_by(name='张三').first().relate_course.all()
obj = course_list.filter_by(name='语文').first()
obj.name = '物理'
db.session.commit()
增加
# 张三 新选了 体育课
cus = Course(name="体育课")
stu = Student.query.filter_by(name='张三').first()
stu.relate_course.append(cus)
db.session.commit()
删除
# 张三 删除了 语文课
cus = Course.query.filter_by(name='语文').first()
stu = Student.query.filter_by(name='张三').first()
stu.relate_course.remove(cus)
db.session.commit()