【发布时间】:2016-10-21 20:13:23
【问题描述】:
我正在尝试通过辅助(多对多)表使用自定义条件编写带有外部联接的查询。我无法找出正确的语法。
假设我有那些 Item 和 Tag 表, 它们之间是多对多的关系:
item_to_tag_table = Table('item_to_tag', Base.metadata,
Column('item_id', Integer, ForeignKey('item.id')),
Column('tag_id', Integer, ForeignKey('tag.id')))
在Item中具有如下关系:
class Item(Base):
id = Column(Integer, primary_key=True)
tags = relationship("Tag",
secondary = item_to_tag_table,
backref = "items",
)
而我想查询不包含特定标签的项目,所以我需要使用外连接。
如果一个标签只链接到一个项目,我可以这样做:
DBSession.query(Items)\
.outerjoin(Tag, and_(Tag.itemId == Item.id, Tag.name == "foo"))\
.having(func.count(Tag.id) < 1)
但是,对于多对多关系,我无法确定正确的语法:
DBSession.query(Items)\
.outerjoin(Tag, and_( ?? , Tag.name == "foo"))\
.having(func.count(Tag.id) < 1)
有什么想法吗?我是否必须进行 2 个外部连接,一个连接到辅助表,另一个连接到 Tag 表?
提前致谢!
【问题讨论】:
标签: python sqlalchemy