Association_proxy与0-n关系

ton*_*nio 4 python sqlalchemy

尝试使用association_proxy时遇到错误.

我得到映射的类A,与B的0-n关系.B与C的0-n关系.association_proxy是从C访问A.

class C(base):
    a = association_proxy('b', 'a')
Run Code Online (Sandbox Code Playgroud)

如果它确实与B有关系,它的工作没有问题.但如果这种关系是null,那么尝试访问myCinstance.a会抛出:AttributeError 'NoneType' object has no attribute 'a'.我猜它适用于1-n关系,但有没有一种方法myCinstance.a返回None而不是错误?(我看到了创建者选项,但看起来只是为了设置,而不是获取).

提前致谢.

我正在使用SqlAlchemy 0.7.5

编辑:我想出了一个简单的例子来描述问题https://gist.github.com/2225046

gur*_*lex 7

我相信阅读http://docs.sqlalchemy.org/en/latest/orm/extensions/associationproxy.html#querying-with-association-proxies,在发出查询时处理案例(即SQL使用的是EXISTS条款来捕获不存在的B问题).

为了使访问者快捷方式起作用,您需要使用getset_factory参数:

def outer_join_accessor_factory(collection_type, proxy):
    def getter(obj):
        if obj is None:
            return None
        return getattr(obj, proxy.value_attr)
    def setter(obj, value):
        setattr(obj, proxy.value_attr, value)
    return getter, setter

class C(Base):
    __tablename__ = 'c'
    id = Column(Integer, primary_key=True)
    id_b = Column(Integer, ForeignKey('b.id'))
    b = relationship('B', backref='cs')
    a = association_proxy('b', 'a', getset_factory=outer_join_accessor_factory)
Run Code Online (Sandbox Code Playgroud)