2023年4月24日月曜日

SQLAlchemyで3テーブルを結合する方法

SQLAlchemyで3テーブルを結合する方法

概要

タイトルの通りです

環境

  • macOS 11.7.4
  • SQLAlchemy 2.0.7

サンプルコード

def list_user_by_sub_group_name(self, name: str) -> list[User]:
    return (
        self.db.query(User)
        .join(Group, User.group_id == Group.id)
        .join(SubGroup, Group.sub_group_id == SubGroup.id)
        .filter(
            SubGroup.name == name,
        )
        .all()
    )

説明

User と Group と SubGroup を結合します
特定の SubGroup 名に所属する User 情報を取得します

db.query(User) の部分は最終的に取得したいテーブルのクラスを指定します
今回は User がほしいので db.query には User を指定します

join する場合には db.query で指定した User クラスと結合したいテーブルを指定します
先に Group と結合するので最初の join では Group を指定します

そして最後に SubGroup と join します

最後に

テーブル作成時の relation 時に join するキーを指定することもできます
その場合は join メソッドで結合するクラスだけを指定すれば OK です

0 件のコメント:

コメントを投稿