Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SqlAlchemy:筛选以匹配列表中的所有值而不是任何值?_Python_Mysql_Sql_Sqlalchemy - Fatal编程技术网

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
中id
ids=[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()