小编Jar*_*ran的帖子

SQLAlchemy - 通过其childer查询父级,过滤连接以匹配列表中的每个子级

我正在尝试查询拥有所有请求技能的人员.不确定动态构建查询的最佳方法是什么.

ORM对象在下面.人与技能之间的多对多,连接表不包括在这里:

Person
name=John, skills=[Skill(id=1)] # John knows Python
name=Eve, skills=[Skill(id=1), Skill(id=2)] # Eve knows Python and SQLAlchemy

Skill
id=1, name=Python
id=2, name=SQLAlchemy
id=3, name=Social skills
Run Code Online (Sandbox Code Playgroud)

在搜索页面上,用户选择一项或多项技能,并根据此创建人员的搜索结果.假设用户想要找到一个知道Python和SQLAlchemy的人.应用程序从表单提交中获取两个ID的列表,[1,2].我得到了以下查询工作,找到匹配技能的人:

session.query(Person)./
join(Skill, Person.skills).filter(Skill.id.in_(list_of_skill_ids))
Run Code Online (Sandbox Code Playgroud)

但是,使用in_子句会导致找到John人员,因为他具有所需技能之一.但搜索结果应仅显示具有所有所需技能的人员.基本上我想要的是像in_()但是用户不是匹配id列表.我可能应该用这个替换in_()部分,它不直接获取id列表:

filter(Person.id == 1, Person.id == 2)
Run Code Online (Sandbox Code Playgroud)

但是,使用从表单中收到的技能ID列表以编程方式构建查询的最简单方法是什么?id的数量可以是1..n.或者这甚至是通过其子女查询父母的正确方法?

python sqlalchemy

2
推荐指数
1
解决办法
1805
查看次数

标签 统计

python ×1

sqlalchemy ×1