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

时间:2015-01-23 09:24:11

标签: python sqlite flask sqlalchemy flask-sqlalchemy

我刚开始学习Flask并使用flask-sqlalchemy包。我有一个架构,其中roles(id,name)和用户(id,username,password,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. backref
  2. primaryjoin
  3. 懒惰
  4. uselist
  5. order_by
  6. secondary
  7. secondaryjoin

1 个答案:

答案 0 :(得分:4)

在某些情况下,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。它在User模型中创建后引用属性。例如:

而不是这样做:

Session.query(Role).filter_by(role_id=user.role_id).first()

你可以这样做:

user.role

关于其他选项,我建议阅读official documentation,因为它比我在答案中提供的任何内容都更有用。