Skip to main content
 首页 » 编程设计

python之使用 "does not contain"一对多过滤 SQLAlchemy

2025年05月04日10mfrbuaa

我正在尝试查询和过滤一对多关系,但似乎无法弄清楚如何执行此操作。

这是我的映射(为简洁起见进行了修剪):

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 的回答中的子查询。