J'ai une configuration hiérarchique à deux tables où la table A référence la table B, qui renvoie ensuite à un autre enregistrement dans la table A, et ainsi de suite ... mais seulement jusqu'à une profondeur de récursivité donnée. J'ai cela fonctionne bien en utilisant SQLAlchemy et déclarative. J'utilise également avec succès le chargement impatient avec les propriétés lazy
et join_depth
sur les relations de table. C'est selon le SQLAlchemy documentation.Comment ajuster dynamiquement la profondeur de récursivité pour un chargement rapide dans SQLAlchemy ORM?
Cependant, cette disposition fixe la profondeur de récursivité à 'join_depth
' une fois au chargement du programme ... mais avec les données que j'utilise, je connais la profondeur de récursivité que je devrais utiliser à chaque fois. Comment puis-je modifier la profondeur de récursivité utilisée par requête?
Je l'ai considéré jongler avec le maître propriété join_depth
sur l'objet ORM de base, mais cela ne fonctionne pas depuis que j'ai une application scoped_session multi-thread où ce serait dangereux (sans parler du fait que le paramètre est assez difficile à localiser dans SQLAlchemy à l'exécution!).
J'ai également regardé en utilisant joinedload
avec la requête mais je ne vois pas comment faire varier la profondeur avec ça. Je suis également au courant de la syntaxe SQL 'WITH RECURSIVE
' disponible dans certaines bases de données via CTEs, mais aussi génial que ce soit, je veux éviter cela pour le moment car certains DB ne le supportent toujours pas (et ni SQLAlchemy - du moins pas pour le moment et pas sans beaucoup de personnalisation du dialecte).