我使用 SQLAlchemy 0.5 和 Python 2.6.6。
我想在 Association_proxy 的创建者中选择或创建一个引用对象。我的问题是,我需要一个会话,但我不知道在创建者回调中从哪里得到它。
如何在其关联代理的创建者之一中使用对象所属的会话?
我尝试过的方法不起作用
我找到了session.object_session
,但回调中没有任何对象,除非它是我的 ORM 对象的一部分。如果它是我的对象的一部分,则调用者将不会作为方法调用(第一个参数是代理的值,而不是对象的引用):
class Event(ManagerBase):
# If association_proxy calls this, 'self' is the key, not the
# reference to the calling instance.
def _field_find_or_create(self, key, val):
session = session.object_session(self)
field = session.query(Field).filter_by(name=key).first()
if not field:
field = Field(name=key)
return EventFieldValue(field=field, value=val)
fields = association_proxy("field_values", "value",
creator=_field_find_or_create)
我可以将对象本身传递给创建者函数吗?在这种情况下,我可以在这个对象上调用 object_session。
我的项目使用了几个会话,因此我必须确定创建者执行的具体会话。