flask中多对多关系 主从表的增删改查

模型

# 学生和课程多对多
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()

参考博客

你可能感兴趣的:(Flask)