Account
、User
、Organization
の3つのテーブルがあります。
Account
は、id
、name
、およびorganization_id
で構成されます。User
は、email
とorganization_id
で構成されます。Organization
は、id
とname
で構成されます。各Account
はOrganization
に登録され(organization_id
を介して)、各User
はOrganization
に登録されます。課題は、organization_id
がUser
のorganization_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")
組織IDでユーザーとアカウントを結合し、名前に基づいてフィルタリングします。
_db.session.query(User.email).\
join(Account, Account.organization == User.organization).\
filter(Account.name == 'some name')
_
Query.join()
2引数形式を使用する場合、任意のSQL式を句として渡すことができます。