更新:
对于遇到此问题的任何人,使用最新的 SQLAlchemy ,此行为已得到修复。
原始问题:
我在获取关联代理以正确更新时遇到问题。
在此处使用示例模型:http: //docs.sqlalchemy.org/en/rel_0_7/orm/extensions/associationproxy.html#simplifying-association-objects
但是用这一行改变 UserKeyword :
keyword = relationship("Keyword", backref=backref("user_keywords", cascade="all, delete-orphan"))
并将其添加到关键字:
users = association_proxy('user_keywords', 'user')
所以一个关键字实例有一个用户列表。
以下按预期工作:
>>> rory = User("rory")
>>> session.add(rory)
>>> chicken = Keyword('chicken')
>>> session.add(chicken)
>>> rory.keywords.append(chicken)
>>> chicken.users
[<__main__.User object at 0x1f1c0d0>]
>>> chicken.user_keywords
[<__main__.UserKeyword object at 0x1f1c450>]
但是移除会做一些奇怪的事情。从关联代理列表中删除,如下所示:
>>> rory.keywords.remove(chicken)
在 SA 尝试将外键列之一设置为空时导致完整性错误。
这样做:
>>> rory.user_keywords.remove(rory.user_keywords[0])
结果如下:
>>> chicken.users
[None]
我错过了一些明显的东西,不是吗?