flask 多对多关系 主从表之间查询

model层

class Studentnew(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(20),unique=True)

    #添加多对多的反向引用,必须使用secondary指定中间关联表
    courses = db.relationship('Course', secondary='xuankebiao',
                              backref=db.backref('students', lazy='dynamic'), lazy='dynamic')

class Course(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(20),unique=True)

# 学生选课表(中间关联表),不需要用户维护
xuankebiao = db.Table('xuankebiao',
    db.Column('student_id', db.Integer, db.ForeignKey('studentnew.id')),
    db.Column('course_id', db.Integer, db.ForeignKey('course.id')),
)

 

views函数:

#多对多关系查询
@blue.route('/manytomany//')
def manytumany(id):
    #根据学生找课程
    # student =Studentnew.query.get(id)
    # courses = student.courses.all()
    # return ','.join(c.name for c in courses)

    #根据课程找学生
    course = Course.query.get(id)
    stus = course.students.all()
    return ','.join((i.name for i in stus))

#多对多添加删除
@blue.route('/many_many/')
def many_many():
    student = Studentnew.query.get(1)
    course = Course.query.get(5)
    #学生选课
    # student.courses.append(course)
    # return student.name + '选了' + course.name

    #取消选课
    student.courses.remove(course)
    return student.name + '取消' + course.name

你可能感兴趣的:(flask 多对多关系 主从表之间查询)