Skip to main content
 首页 » 编程设计

python之association_proxy 创建者中的 session

2025年05月04日12bhlsheji

我使用 SQLAlchemy 0.5 和 Python 2.6.6。

我想在 association_proxy 的创建者中选择或创建一个引用对象。我的问题是,我为此需要一个 session ,但我不知道在创建者回调中从哪里获取它。

我如何在其关联代理的创建者之一中使用对象所属的 session ?

我试过的,没用

我找到了 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) 

我可以将对象本身传递给 creators 函数吗?在这种情况下,我可以对该对象调用 object_session。

我的项目使用多个 session ,因此我必须确定创建者执行的具体 session 。

请您参考如下方法:

我想你需要的是一个验证方法:

from sqlalchemy.orm import validates, object_session 
 
class Event(ManagerBase): 
   value = relationship(FieldValue)     
   fields = association_proxy("field_values", "value", 
                              creator=lambda group: FieldValue(value=value)) 
 
   @validates("field_values")  
   def _validate_field_values(self, key, value):  
       session = object_session(self)  
       if session is not None:  
           v = value.value  
           with session.no_autoflush:  
               uvalue = session.query(FieldValue) \  
                   .filter_by(name=a) \  
                   .first()  
               if uvalue:  
                   session.expunge(value)  
                   return ugroup  
       return value 

学分转到https://groups.google.com/forum/#!topic/sqlalchemy/RMDI1SnGhd0 .