作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想搜索 SQLAlachmey 列表(通过关联表)并通过过滤器匹配其中的多个项目。
我已经评论了this question但我希望仅通过 ORM 过滤器来完成此操作(第二个答案不是通过关联表)。
数据库表设置:
tag_ast_table = Table('tag_association',
Base.metadata,
Column('file_id', Integer, ForeignKey('files.id')),
Column('tag_id', Integer, ForeignKey('tags.id')),
PrimaryKeyConstraint('file_id', 'tag_id'))
class File(Base):
__tablename__ = 'files'
id = Column(Integer, primary_key=True)
tags = relationship("Tag", secondary=tag_ast_table)
class Tag(Base):
__tablename__ = 'tags'
id = Column(Integer, primary_key=True)
tag = Column(String)
当前过滤器匹配任何我想修改以匹配所有:
query = db.query(File).filter(File.tags.any(Tag.tag.in_(my_list))).all()
最佳答案
在 SQL 中(在您的链接中提到)一个合理的方法是使用 having count(distinct tags.id) = <your number of tags>
.
所以查询需要两件事:它需要一个 in
查找您的标签列表,它需要 having
寻找存在的完整计数。
query = (
session.query(File)
.join(File.tags)
.filter(Tag.tag.in_(search_tags))
.group_by(File)
.having(func.count(distinct(Tag.id)) == len(search_tags))
)
作为边缘情况,如果 search_tags
是一个空列表,您不会得到任何结果,所以最好先检查一下。
关于python - SQLAlachmey : ORM filter to match all items in a list, 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35414358/
我是一名优秀的程序员,十分优秀!