Python 与中间表上的附加筛选器的多对多关系

Python 与中间表上的附加筛选器的多对多关系,python,sqlalchemy,Python,Sqlalchemy,我有一个类似下面的模式: 创建表用户(id整数,名称文本); 创建表链接(id1整数、id2整数、整数类型); 创建表地址(id整数、地址文本); 链接表是一个通用联接表:我们使用类型列来限制两个实体之间的联接(例如,对于用户到地址的关系,type=1001)。 我想使用SQLAlchemy表达以下查询: 选择* 来自用户 连接上的链接 link.id1=user.id 和link.type=1001 加入地址 address.id=link.id2 就是这样,在关系的次要联接参数中声明附加

我有一个类似下面的模式:

创建表用户(id整数,名称文本);
创建表链接(id1整数、id2整数、整数类型);
创建表地址(id整数、地址文本);

链接
表是一个通用联接表:我们使用
类型
列来限制两个实体之间的联接(例如,对于用户到地址的关系,type=1001)。 我想使用SQLAlchemy表达以下查询:

选择*
来自用户
连接上的链接
link.id1=user.id
和link.type=1001
加入地址
address.id=link.id2

就是这样,在关系的次要联接参数中声明附加筛选器(即,
link.type=1001

我有以下SQLAlchemy定义:

link=Table('link',db.metadata,
列('id1',INTEGER(),ForeignKey('core\u user.user\u id')),
列('id2',INTEGER(),ForeignKey('core\u comm.id')),
列('type',INTEGER())
)

类用户(db.Model):
__tablename_uu='user'
__架构\公共='public'
id=列('id',INTEGER(),主键=True)
名称=列('name',TEXT())
地址=关系('地址',次要=链接)

类地址(db.Model):
__tablename_uu='地址'
__架构\公共='public'
id=列(整数(),主键=True)
地址=列(Text())

它在3个表之间正确地联接,我得到了记录,但我找不到在辅助联接上应用附加筛选器的方法。我甚至不确定这是正确的方式

理想情况下,我希望在用户对象中获得一个
addresses
字段,这是一个地址对象列表,可能会被反向引用

有什么提示吗? 谢谢

阅读文档的一节。下面的代码应该可以做到这一点:

addresses = relationship('Address',
        secondary=link,
        primaryjoin=id==link.c.id1,
        secondaryjoin="and_(link.c.id2 == Address.id, link.c.type == 1001)",
        backref="users",
        )