SQLAlchemy:向对象传递参数
我在我的项目中使用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这个对象可以通过我直接创建,或者通过SQLAlchemy从数据库加载Foo对象来构建。但是,Foo需要一个Bar对象才能正常工作。那么,我该怎么把Bar的引用放到Foo里呢?
通常情况下,我会直接把Bar传给Foo的构造函数。但是在这里不行,因为是SQLAlchemy在创建这个对象。
我想要做的是,能够以某种方式配置一个Session,让Bar对象在添加Foo对象到这个Session时被注入到Foo里。
我尝试过的
SQLAlchemy有一个事件系统。其中一个会话事件是on_attach。每当一个对象被添加到会话时,这个事件就会被调用。但是,当一个对象从数据库加载时,这个事件不会被调用。
确实有一些事件是在从数据库加载时被调用的,但它们是针对每个映射器的。Bar对象需要与一个特定的会话关联起来。
1 个回答
0
如果你只需要一个 Bar
来服务所有的 Foo
,你可以在 Foo
里面使用一个类属性或者方法。既然你没有选择这个明显的办法,看来你是想为每一个新的 Foo
创建一个新的 Bar
。可能 instrumentation 有你需要的事件。缓存的例子必须有一种方法来拦截加载事件。