Работа с Beaker Cache и SQLAlchemy - PullRequest
       14

Работа с Beaker Cache и SQLAlchemy

1 голос
/ 17 февраля 2011

Я пытаюсь использовать кэш мензурки с SQLAlchemy, но получаю ошибки.

Вот мои определения таблиц.

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)

кэш мензурки работает с другими классами SQLAlchemy, кроме этих.

Когда я запускаю программу, я получаю следующую ошибку:

DetachedInstanceError: Parent instance <Post at 0x101f90b10> is not bound to a Session; lazy load operation of attribute 'user' cannot proceed.

Я искал на StackOverFlow и нашел в другом потоке, что мне нужно отключить отложенную загрузку, поэтому я изменил строку

user = relation(User, primaryjoin = User.id == id)

до

user = relation(User, primaryjoin = User.id == id, lazy='dynamic')

но это происходит со следующей ошибкой в ​​шаблоне (post.user.fullname);

AttributeError: 'AppenderQuery' object has no attribute 'fullname'

Что я делаю не так?

1 Ответ

2 голосов
/ 02 июня 2011

когда вы извлекаете объекты из кэша, вы должны связать их с объектом сеанса, например.

obj_from_cache = get_from_cache(key)
session.merge(obj_from_cache)
...