web-dev-qa-db-ja.com

SQLAlchemyで2つのテーブルのデータを結合する方法は?

AccountUserOrganizationの3つのテーブルがあります。

  • Accountは、idname、およびorganization_idで構成されます。
  • Userは、emailorganization_idで構成されます。
  • Organizationは、idnameで構成されます。

AccountOrganizationに登録され(organization_idを介して)、各UserOrganizationに登録されます。課題は、organization_idUserorganization_idと一致するAccountに対応するnameへのすべての電子メール(Userから)を表示することです。

これが今までの私のコードです:

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")
5
Sujoy Roy

組織IDでユーザーとアカウントを結合し、名前に基づいてフィルタリングします。

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

Query.join() 2引数形式を使用する場合、任意のSQL式を句として渡すことができます。

4
Ilja Everilä