SQLAlchemy三个表之间的关系

2 投票
1 回答
1590 浏览
提问于 2025-04-17 23:51

我正在使用 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 个回答

2

这种查询需要用到一个叫做连接的语句:

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

result = q.all()

这样做会返回一个包含成员对象的列表,这些成员属于部门名称这个部门。

撰写回答