SQLAlchemy 关系,什么时候使用哪种关系?
SQLAlchemy relationships, when to use which relationship?
我刚刚开始学习 Flask 并使用 flask-sqlalchemy 包。我有一个模式,其中角色(id、名称)和用户(id、用户名、密码,role_id)和 role_id 是 roles.id 的外键。一对多关系,因为一个角色可以分配给多个用户,但每个用户都只有一个角色。
在下面的代码中,
class Role(db.Model):
# ..
users = db.relationship('User', backref='role')
class User(db.Model):
# ..
role_id = db.Column(db.Integer, db.ForeignKey('roles.id')
这里我已经建立了role_id的用法,但是为什么还要db.relationship呢?关系选项有什么用,用在什么地方:
- backref
- 主要加入
- 懒惰
- 使用列表
- order_by
- 中学
- 辅助加入
db.relationship 在某些情况下非常有用,可以帮助您避免长查询。
例如
没有db.relationship
:
role = ... # some role
Session.query(User).filter_by(role_id=role.role_id).all()
与 db.relationship
对比:
role = ... # some role
role.users
关于关系选项,对您最有用的可能是 backref
。它在用户模型中创建反向引用 属性。例如:
而不是这样做:
Session.query(Role).filter_by(role_id=user.role_id).first()
你可以这样做:
user.role
关于剩余的选项,我建议阅读 official documentation,因为它比我在答案中提供的任何内容都更能提供信息。
我刚刚开始学习 Flask 并使用 flask-sqlalchemy 包。我有一个模式,其中角色(id、名称)和用户(id、用户名、密码,role_id)和 role_id 是 roles.id 的外键。一对多关系,因为一个角色可以分配给多个用户,但每个用户都只有一个角色。
在下面的代码中,
class Role(db.Model):
# ..
users = db.relationship('User', backref='role')
class User(db.Model):
# ..
role_id = db.Column(db.Integer, db.ForeignKey('roles.id')
这里我已经建立了role_id的用法,但是为什么还要db.relationship呢?关系选项有什么用,用在什么地方:
- backref
- 主要加入
- 懒惰
- 使用列表
- order_by
- 中学
- 辅助加入
db.relationship 在某些情况下非常有用,可以帮助您避免长查询。
例如
没有db.relationship
:
role = ... # some role
Session.query(User).filter_by(role_id=role.role_id).all()
与 db.relationship
对比:
role = ... # some role
role.users
关于关系选项,对您最有用的可能是 backref
。它在用户模型中创建反向引用 属性。例如:
而不是这样做:
Session.query(Role).filter_by(role_id=user.role_id).first()
你可以这样做:
user.role
关于剩余的选项,我建议阅读 official documentation,因为它比我在答案中提供的任何内容都更能提供信息。