8

テーブル A がテーブル B を参照し、テーブル B がテーブル A の別のレコードを参照するという 2 つのテーブルの階層セットアップがありますが、指定された再帰の深さまでしかありません。

これは、SQLAlchemy と宣言型を使用してうまく機能しています。また、テーブル リレーションのlazyおよびプロパティを使用した熱心な読み込みをうまく使用しています。join_depthこれは、SQLAlchemy のドキュメントのとおりです。

ただし、この配置ではjoin_depth、プログラムのロード時に ' ' で再帰の深さが固定されます... しかし、使用しているデータを使用すると、毎回使用する必要がある再帰の深さがわかります。 クエリごとに使用される再帰の深さを変更するにはどうすればよいですか?

ベース ORM オブジェクトのマスター プロパティをいじることを検討しjoin_depthましたが、危険なマルチスレッドの scoped_session アプリケーションを使用しているため、これは機能しません (パラメーターが非常に難しいという事実は言うまでもありません)。実行時に SQLAlchemy 内で見つけてください!)。

クエリでの使用も検討しましたjoinedloadが、それで深さを変える方法がわかりません。

一部のデータベースではCTEWITH RECURSIVE経由で ' ' SQL 構文を使用できることも認識していますが、これは素晴らしいことですが、一部の DB ではまだサポートされていないため (少なくとも SQLAlchemy もサポートしていないため)、当面は避けたいと思います。現時点ではなく、多くの方言のカスタマイズがないわけではありません)。

4

1 に答える 1