我正在尝试查询和过滤一对多关系,但似乎无法弄清楚如何执行此操作。
这是我的映射(为简洁起见进行了修剪):
class Bug(Base):
__tablename__ = 'bug'
id = Column('bug_id', Integer, primary_key=True)
tags = relationship('Tag', backref='bug')
class Tag(Base):
id = Column('tag_id', Integer, primary_key=True)
name = Column('tag_name', String)
bug_id = Column('bug_id', ForeignKey('bug.bug_id'))
我希望能够找到所有没有名为“foo”的标签的错误。
请您参考如下方法:
您可以对关系使用 any() 运算符。
bugs_without_foo = session.query(Bug).filter(
db.not_(Bug.tags.any(Tag.name == 'foo'))
).all()
看起来更好看,但它 could be less efficient over very large data sets比 Dan Lenski 的回答中的子查询。
