gpt4 book ai didi

python - 具有 0-n 关系的 Association_proxy

转载 作者:太空狗 更新时间:2023-10-30 02:22:34 25 4
gpt4 key购买 nike

我在尝试使用 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' 对象没有属性 'a'。我想它适用于 1-n 关系,但有没有办法让 myCinstance.a 返回 None 而不是错误? (我看到了creator选项,不过貌似只能设置,不能获取)。

提前致谢。

我正在使用 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)

关于python - 具有 0-n 关系的 Association_proxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9892046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com