【问题标题】:SQLAlchemy relationships, when to use which relationship?SQLAlchemy 关系,何时使用哪种关系?
【发布时间】:2015-03-22 07:11:12
【问题描述】:

我刚刚开始学习 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呢?关系选项有什么用,在哪里用什么:

  1. 反向引用
  2. primaryjoin
  3. 懒惰
  4. 使用清单
  5. order_by
  6. 次要
  7. 次要加入

【问题讨论】:

    标签: python sqlite flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    拥有 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,因为它比我可以在答案中提供的任何内容都提供更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-20
      • 2023-01-31
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多