Python flask多对多表的创建及添加数据查询数据

models中建表代码:

#多对多建表
                             #中间表名字
zhongjianbiao  = db.Table('zhongjianbiao',
                                                                      #你需要关联的表名字student
                         db.Column('student_id', db.Integer, db.ForeignKey('student.id')),
                                                                   #你需要关联的表名字:class
                         db.Column('class_id', db.Integer, db.ForeignKey('class.id'))
                         )

class Student(db.Model):
    id = db.Column(db.Integer, primary_key=True,autoincrement=True)
    name = db.Column(db.String(32))
#用学生查询课程时用查询到的学生对象:“学生对象.classe.all()”得到其对应的所有课程
    classe = db.relationship('Class', secondary=zhongjianbiao,
                             backref=db.backref('student', lazy='dynamic'), lazy='dynamic')
#db.backref('student', 中的student用来反向关联,用课程查询其对应的所有学生。用查询到的课程对象.student.all()得到。
#relationship可以放到任意一个类中都行,与之相反。

class Class(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(32))

视图中查询代码:

#定义课程信息格式
cou_info = {
    "coursename": fields.String(attribute="name"),
}
#定义返回json字段格式
cou_fields = {
    "msg": fields.String,
    "status": fields.String,
    "course": fields.Nested(cou_info)
}
class StudentResource(Resource):
#用装饰器应用上边的自定义数据格式
    @marshal_with(cou_fields)
    def get(self):
    #获取到get传过来的学生ID和课程ID
        stuid=request.args.get('stuid')
        stu=Student.query.get(stuid)
    #通过学生对象(stu)查找其对应的所有课程,classe为你在表中建的relationship前的名字
        cous=stu.classe.all()
        #print(cous)
        #print(type(cous))
        return {'status':'200','msg':'success','course':cous}
#添加学生和课程间的关系:如学生1选了课程3添加到关系表中:
    def post(self):
    #拿到form表单传过来的学生ID和课程ID
        stuid=request.form.get('stuid')
        couid=request.form.get('couid')
    #通过ID查到对象
        stu=Student.query.get(stuid)
        cous=Class.query.get(couid)
    #添加学生对象
        db.session.add(stu)
    #添加两者关系到中间表
        stu.classe.append(cous)
        db.session.commit()
        return {'status':'200','msg':'add student successfuly'}
    def put(self):
        pass
    def delete(self):
        pass

添加课程,添加学生同理。。

class ClassResource(Resource):
    def get(self):
        pass
    def post(self):
        name=request.form.get('username')
        classer=Class()
        classer.name=name
        db.session.add(classer)
        db.session.commit()
        return {'status':200,'msg':'add class sucessful'}
    def put(self):
        pass
    def delete(self):
        pass

猜你喜欢

转载自blog.csdn.net/ITcainiaoyizhan/article/details/84866165