ホームページ > データベース > mysql チュートリアル > SQLAlchemy で複数のテーブル (ユーザー、ドキュメント、権限) を効率的に結合するにはどうすればよいですか?

SQLAlchemy で複数のテーブル (ユーザー、ドキュメント、権限) を効率的に結合するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-01 03:11:10
オリジナル
274 人が閲覧しました

How Can I Efficiently Join Multiple Tables (Users, Documents, Permissions) in SQLAlchemy?

SQLAlchemy での複数のテーブルの結合

SQLAlchemy では、テーブルを結合することで、複数の関連エンティティからのデータを組み合わせることができます。これを説明するために、次の例を考えてみましょう。

ユーザー、ドキュメント、およびドキュメントのアクセス許可を表す次のマップされたクラスがあるとします。

class User(Base):
    __tablename__ = 'users'
    email = Column(String, primary_key=True)
    name = Column(String)

class Document(Base):
    __tablename__ = "documents"
    name = Column(String, primary_key=True)
    author = Column(String, ForeignKey("users.email"))

class DocumentsPermissions(Base):
    __tablename__ = "documents_permissions"
    readAllowed = Column(Boolean)
    writeAllowed = Column(Boolean)

    document = Column(String, ForeignKey("documents.name"))
ログイン後にコピー

ユーザーに関する情報を含むテーブルを取得するには、ドキュメント、および特定のユーザーのドキュメント権限を取得するには、次のクエリを使用できます:

q = Session.query(
         User, Document, DocumentPermissions,
    ).filter(
         User.email == Document.author,
    ).filter(
         Document.name == DocumentPermissions.document,
    ).filter(
        User.email == 'someemail',
    ).all()
ログイン後にコピー

This query:

  1. メール列と作成者列の間の関係に基づいて、User テーブルと Document テーブルを結合します。
  2. 両方のテーブルの name 列。
  3. User.email が指定された値と等しい行のみを含むように結果をフィルタリングします。この例では ('someemail')。

このクエリを実行すると、1 回のリクエストで 3 つの関連テーブルからすべての関連情報を効率的に取得でき、指定されたメールに関連するデータの包括的なビューが提供されます。ユーザー。

以上がSQLAlchemy で複数のテーブル (ユーザー、ドキュメント、権限) を効率的に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート