前几天已经讲了flask sqlalchemy的创建方法,以及最基本的用法,今天来说一下一对多的关系
为了方便测试,使用的是上次修改的代码,本次演示的是course和student的关系,一个course可以对应多个student
from config import db
class Student(db.Model):
__tablename__ = 'student'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
c_id = db.Column(db.Integer, db.ForeignKey('course.id'))
# 这里是用来建立关系的,告诉course的table,外键在这个地方,这个也可以单独使用
course = db.relationship('Course', backref=db.backref('stu', lazy='dynamic'))
# backref是反响代理,下面会给大家演示怎么用
def __init__(self, name):
self.name = name
def __repr__(self):
return '<User %r>' % self.usernam
class Course(db.Model):
__tablename = 'course'
id = db.Column(db.Integer, primary_key=True)
c_name = db.Column(db.String(120))
def __init__(self,c_name):
self.c_name = c_name
这里教大家怎么使用数据关系的调用:
from student import *
s1 = Student("Mike")
s2 = Student("Jacob")
c1 = Course("COMP1531")
db.session.add(s1)
db.session.add(s2)
db.session.add(c1)
db.session.commit()
# course里面添加学生,因为我之前设置过反向代理,所以可以直接使用c1.stu.append,大家可以理解为这是个定义过类型的list
c1.stu.append(s1)
c1.stu.append(s2)
db.session.add(c1)
db.session.commit()
print(s1.course.c_name)
# 这里是查看所有注册过这门课的学生
for user in c1.stu:
print(user.name)