老师,flask的relationship ,不是很懂,可以举举例子说明下吗?

来源:5-2 问题详情动态页面开发

若羲

2021-12-24 17:45:33

1、一对多

2、多对多

写回答

1回答

好帮手慕燕燕

2021-12-24

同学,你好!

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'))

数据库表对应的数据如下:

https://img.mukewang.com/climg/61c5aa0d09f4f56705980105.jpg

https://img.mukewang.com/climg/61c5aa2a093db34d06340183.jpg

那么通过user对象可以获取到该用户对应的三个地址

https://img.mukewang.com/climg/61c5aa65098a856b09000432.jpg

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'

祝:学习愉快!

0

0 学习 · 2433 问题

查看课程