使用Beaker Cache和SQLAlchemy

时间:2011-02-17 19:06:21

标签: python caching sqlalchemy beaker

我正在尝试使用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)

beaker cache与其他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 个答案:

答案 0 :(得分:2)

从缓存中获取对象时,应将它们与会话对象关联,例如

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