繁体   English   中英

Association_proxy与0-n关系

[英]Association_proxy with 0-n relations

尝试使用association_proxy时遇到错误。

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

class C(base):
    a = association_proxy('b', 'a')

如果它确实与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

我相信阅读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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM