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?

Était-ce utile?

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
scroll top