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