我在我的项目中使用SQLAlchemy。
我有两个班,称他们为Bar和Foo
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中呢?
通常,我只是将Bar传递给Foo构造函数。但是,这在这里不起作用,因为SQLAlchemy正在创建对象。
我希望能够以某种方式配置一个带有Bar对象的Session,以便在将这些bar对象添加到会话时将其注入Foo对象。
我尝试过什么
SQLAlchemy有一个事件系统。其中一个会话事件是on_attach。只要将对象添加到会话中,就会调用此方法。但是,从数据库加载对象时不会调用它。
从数据库加载时会调用某些事件,但它们是基于每个映射器的。 Bar对象需要与单个会话相关联。
答案 0 :(得分:0)
如果您对所有Bar
只需要一个Foo
,则可以在Foo
中使用类属性或方法。由于您没有采用这条明显的路径,因此您似乎需要为每个新Bar
构建一个新的Foo
。可能instrumentation有所需的事件。缓存示例必须有一种方法来拦截加载事件。