python

SQLAlchemyでモデルを継承して用途を分けたクラスを作る

スポンサーリンク

概要

SQLAlchemy2.0で、継承によって複数のモデルクラスを作成し、用途に応じて必要なリレーションのフィールドを追加させる方法のメモ。

この方法を使うことで、一つのモデルクラス内に一部のケースでのみ使用するフィールドが増加して肥大化することを防げる。

スポンサーリンク

説明

背景

下記のような書籍レビューモデルと、ユーザーモデルがあるとする。1:1の関係で書籍レビューはユーザーIDのみを保持する。

コメントアウトされたuserフィールドのようにリレーションの実態を持たせ、参照することができる。しかしながら、idだけではなく、UserDTO自体が欲しいケースと欲しくないケースがあるので両方を持たせるのは気持ち悪い。

 

解決方法

そこで、下記のような元のモデルを継承して、リレーションの実態を持つフィールドを定義する。

下記のようにUserDTOの実態にアクセスしたい場合には、継承したBookReviewExtendDTOでselectを行う。

ベースクラスのBookReviewDTOに側に、使う場合と使わない場合がある、余計なフィールドを定義することを避けることがきて見通しが良くなった。

 

-python

© 2025 nobu blog Powered by AFFINGER5