2014-03-25 118 views
1

我正在使用Python 2.7.2和SQLAlchemy 0.9.3。SQLAlchemy 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')) 

回答

2

這種查詢需要join聲明:

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

result = q.all() 

這將返回會員對象名單,其中成員是部門的一部分depart_name

+0

謝謝!像魅力一樣工作。我的錯誤是我加入Member.group_id和Group.department_id。應該使用backref名稱。 – Akash