外键
例子1
关系型数据库使用关系把不同表中的行联系起来。
class Role(db.Model):
# ...
users = db.relationship('User', backref='role')
class User(db.Model):
# ...
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
如图上例所示,关系使用 users 表中的外键连接了两行。添加到 User 模型中的 role_id 列被定义为外键,就是这个外键建立起了关系。传给 db.ForeignKey() 的参数 'roles.id' 表明,这列的值是 roles 表中行的 id 值。
添加到 Role 模型中的 users 属性代表这个关系的面向对象视角。对于一个 Role 类的实例,其 users 属性将返回与角色相关联的用户组成的列表。db.relationship() 的第一个参数表明这个关系的另一端是哪个模型。如果模型类尚未定义,可使用字符串形式指定。
db.relationship() 中的 backref 参数向 User 模型中添加一个 role 属性,从而定义反向关系。这一属性可替代 role_id 访问 Role 模型,此时获取的是模型对象,而不是外键的值。
例子2
# node.py
class Node(db.Model, ModelMixin):
__tablename__ = 'nodes'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String())
# has relationship with topic
topics = db.relationship('Topic', backref="node")
# topic.py
class Topic(db.Model, ModelMixin):
__tablename__ = 'topics'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String())
content = db.Column(db.String())
#
node_id = db.Column(db.Integer, db.ForeignKey('nodes.id'))
网友评论