[英]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.