Travailler avec Beaker Cache et Sqlalchemy
-
14-11-2019 - |
Question
J'essaie d'utiliser du cache de beaker avec Sqlalchemy mais j'ai reçu des erreurs.
Voici les définitions de ma table.
class Post(Base):
....
....
user = relation(User, primaryjoin = User.id == id)
tags = relation('Tags', backref = 'posts')
class Tags(Base):
...
...
user = relation(User, primaryjoin = User.id == id)
post = relation(Post, primaryjoin = Post.id == id)
Beaker Cache fonctionne avec d'autres classes sqlalchemy sauf celles-ci.
Lorsque j'exécute le programme, je reçois l'erreur suivante;
DetachedInstanceError: Parent instance <Post at 0x101f90b10> is not bound to a Session; lazy load operation of attribute 'user' cannot proceed.
J'ai cherché sur stackOverflow et j'ai trouvé dans un autre fil dont j'ai besoin pour désactiver le chargement paresseux, j'ai donc changé la ligne
user = relation(User, primaryjoin = User.id == id)
à
user = relation(User, primaryjoin = User.id == id, lazy='dynamic')
Mais cela se produit à l'erreur suivante dans le modèle (post.user.fullname
);
AttributeError: 'AppenderQuery' object has no attribute 'fullname'
Qu'est-ce que je fais mal?
La solution
Lorsque vous saisissez des objets de Cache, vous devez les associer à un objet de session, par exemple.
obj_from_cache = get_from_cache(key)
session.merge(obj_from_cache)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow