SQLAlchemy 3个表之间的关系

时间:2014-03-25 17:10:17

标签: python sqlalchemy

我正在使用Python 2.7.2和SQLAlchemy 0.9.3。

一个部门有很多团体。一个集团有很多成员。会员只能在一个小组中。

目前获取部门所有成员的列表。我首先获得所有组,然后获得这些组的成员。

有没有办法直接从部门转到成员而不通过分组表?

class Department(Base):
    __tablename__ = 'departments'

    id = Column(Integer, primary_key=True)
    name = Column(String(64), unique=True)
    location = Column(String(32), unique=True)
    groups = relationship("Group", backref="department")

class Group(Base):
    __tablename__ = 'groups'

    id = Column(Integer, primary_key=True)
    name = Column(String(64), unique=True)
    department_id = Column(Integer, ForeignKey('departments.id'))
    members = relationship("Member", backref="group")

class Member(Base):
    __tablename__ = 'members'

    id = Column(Integer, primary_key=True)
    group_id = Column(Integer, ForeignKey('groups.id'))

1 个答案:

答案 0 :(得分:2)

此类查询需要join声明:

q = session.query(Member).\
        join(Member.group).\
        join(Group.department).\
        filter(Department.name=='depart_name')

result = q.all()

这将返回成员对象的列表,其中该成员是部门的一部分 depart_name