SQLAlchemy 关系,何时使用哪种关系?

Anu*_*nuj 1 python sqlite sqlalchemy flask flask-sqlalchemy

我刚刚开始学习 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')
Run Code Online (Sandbox Code Playgroud)

到这里,我已经建立了role_id的用法,但是为什么还需要db.relationship呢?关系选项有什么用以及在哪里使用:

  1. 反向引用
  2. 主连接
  3. 懒惰的
  4. 使用列表
  5. 订单依据
  6. 中学
  7. 二次连接

Dmi*_*ylo 6

拥有 db.relationship 在某些情况下非常有用,可以帮助您避免长时间查询。

例如

没有db.relationship

role = ...  # some role
Session.query(User).filter_by(role_id=role.role_id).all()
Run Code Online (Sandbox Code Playgroud)

db.relationship

role = ... # some role
role.users
Run Code Online (Sandbox Code Playgroud)

关于关系选项,对您最有用的可能是backref。它在用户模型中创建反向引用属性。例如:

而不是这样做:

Session.query(Role).filter_by(role_id=user.role_id).first()
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

user.role
Run Code Online (Sandbox Code Playgroud)

关于剩余的选项,我建议阅读官方文档,因为它比我可以在答案中放置的任何内容都提供更多信息。