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 个回答
2
这种查询需要用到一个叫做连接的语句:
q = session.query(Member).\
join(Member.group).\
join(Group.department).\
filter(Department.name=='depart_name')
result = q.all()
这样做会返回一个包含成员对象的列表,这些成员属于部门名称这个部门。