【问题标题】:How to intersect values in many-to-many relationship sqlalchemy?如何在多对多关系sqlalchemy中相交值?
【发布时间】:2022-07-07 03:03:39
【问题描述】:

我有桌子Teacher。它包含与表Student 的多对多关系。学生包含唯一列 name。如何找到所有包含特定姓名学生的教师?
例如:
Teacher1 包含名为“Bob”的 Student1 和名为“Alice”的 Student2。
Teacher2 包含名为“Alice”的 Student2 和名为“Mark”的 Student3。
Teacher3 包含名为“Bob”的 Student1。
Teacher4 包含名为“Mark”的 Student3。
我得到了名字["Alice", "Mark"]
在这个例子中,我必须得到教师 1、2、4。
如何编写这个 sqlalchemy 查询?
session.query(Teacher).filter(...).all()?

【问题讨论】:

  • 在 SQL 中,您可以 LEFT JOIN 学生表(过滤您想要的学生)到教师表,然后 COUNT() 为教师空值?

标签: python sql sqlalchemy many-to-many


【解决方案1】:

假设您的关联多对多模型/表是 StudentTeacher 并且您正在寻找 names=("Alice", "Mark",),此查询应该返回您所期望的:

results = session.query(
   Teacher
).join(StudentTeacher).join(Student).filter(
   Student.name.in_(names)
).all()

【讨论】:

    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多