如何在SQLAlchemy中将两个表的数据联接起来?

11

我有三张表:Account, UserOrganization

  • Account 包含 id, nameorganization_id
  • User 包含 emailorganization_id
  • Organization 包含 idname

每个 Account 都注册到一个 Organization (通过 organization_id),每个 User 也是注册到一个 Organization。挑战在于显示所有来自与 User 的电子邮件(email),这些 User 是注册到与 Account 相应的 nameorganization_id 匹配的 Organization 上的。

以下是我的代码:

class Account(db.Model):
    __tablename__ = "account"
    id = Column(Integer, primary_key=True)
    name = Column(String(50), index=True, unique=True)
    organization = Column(Integer, 
        ForeignKey("organization.id"),nullable=False, index=True)

class User(UserMixin, db.Model, RBACUserMixin):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    organization = Column(Integer, ForeignKey("organization.id"), 
                      nullable=False, index=True)

class Organization(db.Model):
    __tablename__ = "organization"
    id = Column(Integer, primary_key=True)
    name = Column(String(512))
    users = relationship("User", backref="organizations")
    accounts = relationship("Account", backref="organizations")
1个回答

14

根据组织ID加入用户和账户,并根据名称进行过滤:

db.session.query(User.email).\
    join(Account, Account.organization == User.organization).\
    filter(Account.name == 'some name')

Query.join()函数可以在使用2个参数形式时将任意SQL表达式作为on-clause参数传递进去。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接