3 votes

Effacer le cache de réflexion de sqlalchemy

Je suis en train d'utiliser les outils de réflexion de SQLAlchemy pour obtenir un objet Table. Je fais cela car ces tables sont dynamiques et les tables/colonnes peuvent changer. Voici le code que j'utilise :

def getTableByReflection(self, tableName, metadata, engine):

    return Table(tableName, metadata, autoload = True, autoload_with = engine)

Le problème est que lorsque le code ci-dessus est exécuté deux fois, il semble renvoyer les mêmes résultats peu importe si les colonnes ont changé ou non. J'ai essayé de rafraîchir en utilisant mysession.refresh(mytable) mais cela échoue car la table n'est pas attachée à des métadonnées - ce qui a du sens mais alors pourquoi est-ce que je vois des résultats mis en cache ?

Y a-t-il un moyen de dire aux métadonnées/moteur/session d'oublier cette table et de me permettre de la charger proprement ?

6voto

codeape Points 38576

Transmettre une instance de métadonnées nouvellement créée et fraîche.

1voto

OrganicPanda Points 667

Avec merci à codeape pour son commentaire ci-dessus, j'ai pu résoudre le problème en changeant la syntaxe à :

def getTableByReflection(self, tableName, metadata, engine):

    return Table(tableName, MetaData(), autoload = True, autoload_with = engine)

Donc en passant une nouvelle instance de MetaData() à chaque fois. Cela affecte probablement les performances mais c'est ok pour moi dans cette partie de mon application.

Tout le crédit à codeape

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X