我在我的项目中使用SQLAlchemy。在
我有两个班,叫“酒吧”和“福”
class Bar(object):
def valueize(self, name):
# do some crazy magic
return value
class Foo(Base):
id = Column(...
name = Column(...
@property
def value(self):
return self._bar.valueize(self.name)
Foo是由我直接构造对象或者当它从数据库加载Foo对象时由SQLalchemy构造的。但是Foo需要一个Bar对象才能工作。但是我怎么把对Bar的引用放到Foo中呢?在
通常,我只需将该条传递给Foo构造函数。但是,这在这里行不通,因为SQLAlchemy正在创建对象。在
我想做的是用Bar对象配置一个会话,这样当Foo对象被添加到会话中时,Bar对象被注入到Foo对象中。在
我尝试过的
SQLAlchemy有一个事件系统。其中一个会话事件在连接上。每当向会话中添加对象时,都会调用此函数。但是,当从数据库加载对象时不会调用它。在
从数据库加载时会调用一些事件,但这些事件是基于每个映射器的。Bar对象需要与单个会话相关联。在
如果所有
Foo
只需要一个Bar
,那么可以在Foo
中使用一个类属性或方法。由于您还没有走这条明显的道路,您似乎需要为每个新的Foo
构造一个新的Bar
。可能instrumentation具有所需的事件。缓存示例必须有一种方法来截获加载事件。在相关问题 更多 >
编程相关推荐