🐍

SQLAlchemyではselectinloadを使うのが安定

2024/06/20に公開

始めに

自分用メモ。sqlalchemyではeager loadをする際にsubqueryloadselectinload等々さまざまなload方法を指定できます。

しかし、片方はdeprecatedまでは設定されていませんが、非推奨なloading方法なのでそれを忘れないようにするための記事です。

環境

  • Python
    • 3.12.4
  • SQLAlchemy
    • 2.0.32

実装

selectinloadの方が推奨されている。SQLAlchemyがV1のころはsubqueryloadも使用されていたが、V2になってからは非推奨な場面が増えています。

もし、複数キーで突合したい場合はselectinloadを使用する必要がありますが、単一キーで突合したい場合にはselectinloadを使用する必要があります。

詳細は公式ヘルプを参照してください。

ソースコード

なし。

終わりに

実際に本番でSQLAlchemyを運用していました。

あくまで感覚値で申し訳ないのですが、subqueryloadのテストが甘いのかライブラリアップデートのたびに不具合が発生しているように感じます。

少なくとも報告が上がっているうえで踏んだ不具合は次のIssueです。ほかにもsubqueryload絡みで踏んだ不具合はあるのですが、Issueとしては見つかりませんでした。

このブログを見てくださった方が一人でも早くsubqueryloadからselectinloadに切り替えていただければと考えています。

参考情報

Discussion