python - 几个多对多表与 sqlalchemy 连接

标签 python sqlalchemy join

SQLalchemy 的新功能,这是我的问题:

我的模型是:

user_group_association_table = Table('user_group_association', Base.metadata,
    Column('user_id', Integer, ForeignKey('user.id')), 
    Column('group_id', Integer, ForeignKey('group.id'))    
)

department_group_association_table = Table('department_group_association', Base.metadata,
    Column('department', Integer, ForeignKey('department.id')), 
    Column('group_id', Integer, ForeignKey('group.id'))
)

class Department(Base):
    __tablename__ = 'department'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))


class Group(Base):
    __tablename__ = 'group'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    users = relationship("User", secondary=user_group_association_table, backref="groups")
    departments = relationship("Department", secondary=department_group_association_table, backref="groups")

class User(Base):

    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    firstname = Column(String(50))
    surname = Column(String(50))

因此,这段代码反射(reflect)了以下关系:

   --------             ---------             --------------
   | User | --- N:M --- | Group | --- N:M --- | Department |
   --------             ---------             --------------

我尝试使用联接,但仍未成功执行以下操作:

一个 sqlalchemy 请求获取所有用户实例,同时知道部门名称(比如“研发”)

这应该开始于:

session.query(User).join(...
or
session.query(User).options(joinedLoad(...

有人可以帮忙吗?

谢谢你的时间,

皮埃尔

最佳答案

session.query(User).join((Group, User.groups)) \
    .join((Department, Group.departments)).filter(Department.name == 'R&D')

这也有效,但使用了子选择:

session.query(User).join((Group, User.groups)) \
    .filter(Group.departments.any(Department.name == 'R&D'))

关于python - 几个多对多表与 sqlalchemy 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679846/

相关文章:

python - 你如何使用 python 的 os.system() 引用 "echo"?

mysql 多重内连接复杂度

python - 系统不响应 pexpect 命令

python - Python 中的 float 概念

python - 在 Python 2/3 中访问函数内部的全局变量时出现异常

sql - 在 MySQL 中使用 JOINS

Mysql对三张多列表的join查询

python - SQLAlchemy 经典映射模型到分片 Postgres 数据库

SQL 限制与扩展

flask - Sqlalchemy - 当数据有关系时如何正确地将数据批量插入到数据库中