尝试使用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
答案 0 :(得分: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)