老师,flask的relationship ,不是很懂,可以举举例子说明下吗?
来源:5-2 问题详情动态页面开发
若羲
2021-12-24 17:45:33
1、一对多
2、多对多
1回答
同学,你好!
1、例如用户表和用户地址表是一对多的关系,一个用户可以有多个地址
class User(db.Model): __tablename__ = 'weibo_user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), nullable=False) password = db.Column(db.String(256), nullable=False) birthday = db.Column(db.Date, nullable=True) age = db.Column(db.Integer, default=0) class UserAddress(db.Model): """ 用户的地址 """ __tablename__ = 'weibo_user_addr' id = db.Column(db.Integer, primary_key=True) addr = db.Column(db.String(256), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('weibo_user.id'), nullable=False) # 建立与用户的一对多属性,一个用户可以有多个地址 user = db.relationship('User', backref=db.backref('address', lazy='dynamic'))
数据库表对应的数据如下:
那么通过user对象可以获取到该用户对应的三个地址
2、多对多关系的处理是在两个表之间建立另外一张表格,设置两个外键去分别关联另外两张表的主键,目前项目中没有涉及到,同学可结合下面的代码示例理解一下,一个老师可以教多个班级,一个班级有多个老师
t_g=db.Table('t_g',db.Column('t_id',db.String(50),db.ForeignKey('teacher.id')),db.Column('g_id',db.Integer,db.ForeignKey('grade.id'))) class Teacher(db.Model,DBO): id=db.Column(db.String(50),primary_key=True) name=db.Column(db.String(50),nullable=False) password = db.Column(db.String(50), nullable=False) phone=db.Column(db.String(11), nullable=False) photo=db.Column(db.String(100),default=None) grades=db.relationship('Grade',secondary=t_g,backref='th',lazy='dynamic') __tablename__='teacher' class Grade(db.Model,DBO): id=db.Column(db.Integer,primary_key=True) name=db.Column(db.String(20),nullable=False) num = db.Column(db.Integer, default=0) time = db.Column(db.String(20), default='2018-01-01') students=db.relationship('Student',backref='gd',lazy='dynamic') __tablename__='grade'
祝:学习愉快!
相似问题
回答 1