Python SqlAlchemy:筛选以匹配列表中的所有值而不是任何值?
我想在连接表中查询列Python SqlAlchemy:筛选以匹配列表中的所有值而不是任何值?,python,mysql,sql,sqlalchemy,Python,Mysql,Sql,Sqlalchemy,我想在连接表中查询列aID的值,该列与列bID中idids=[3,5]列表的所有值相匹配 这是我的连接表(JT): 我有这样一个查询:session.query(JT.aID).filter(JT.bID.in(ids)).all() 此查询返回aID值1、2和3,因为它们在bID列中都有3或5的行。我希望查询返回的是2,因为这是唯一一个aID值,它在bID列中包含ids列表的所有值 我不知道如何更好地解释这个问题,但我如何才能得到结果?您正在寻找一个对行集有效的查询。我认为使用having子句
aID
的值,该列与列bID
中idids=[3,5]
列表的所有值相匹配
这是我的连接表(JT
):
我有这样一个查询:session.query(JT.aID).filter(JT.bID.in(ids)).all()
此查询返回aID
值1
、2
和3
,因为它们在bID
列中都有3
或5
的行。我希望查询返回的是2
,因为这是唯一一个aID
值,它在bID
列中包含ids
列表的所有值
我不知道如何更好地解释这个问题,但我如何才能得到结果?您正在寻找一个对行集有效的查询。我认为使用having子句进行分组是最好的方法:
select aid
from jt
where bid in (<your list>)
group by aid
having count(distinct bid) = 2
select aid
from jt join
bids
on jf.bid = bids.bid
group by aid
having count(distinct jt.bid) = (select count(*) from bids)
尝试:
基于@Gordon Linoff答案,有两个表
A
和B
,其中A
有一个关系-
对于许多被称为A.bs
的B
的人来说,SqlAlchemy的等价物是:
from sqlalchemy import func
session.query(A).join(B).filter(B.id.in_(<your_list>)).group_by(A.id).having(func.count(A.bs) == len(<your_list>)).all()
来自sqlalchemy导入函数
session.query(A).join(B).filter(B.id.in_uuu()).group_uby(A.id).have(func.count(A.bs)==len()).all()
我可能会用你的一个标签交换通用的sql
标签,因为这实际上是一个通用的SQL查询问题,这样可以提高问题的可视性。SqlAlchemy对此是否有特定的语法,还是必须使用SQL?SqlAlchemy能够使用其SQL表达式语言生成类似的查询,虽然在获得Python语法之前,您可能需要对Python语法进行一点实验,但在其文档中已经做了很好的介绍。另外,sqlalchemy还允许您以文本文本形式发出直接查询。最后,如果您确实需要动态地构建查询,根据程序逻辑中发生的事情从组件组装查询,那么您可以使用sqlalchemy的ORM工具进行操作,但通常您不会选择更长、更慢的方法,除非确实需要。
session.query(JT.aID).filter(not_(JT.bID.in_(ids))).all()
from sqlalchemy import func
session.query(A).join(B).filter(B.id.in_(<your_list>)).group_by(A.id).having(func.count(A.bs) == len(<your_list>)).all()