2010-06-15 215 views
3

相關(對於沒有關聯對象使用情況)在同一個表關係:SQLAlchemy Many-to-Many Relationship on a Single Table許多一對多與關聯對象

構建多到多的關係是很容易。在同一張桌子上建立多對多關係幾乎與上述問題中所記錄的一樣簡單。

與關聯對象建立多對多關係也很容易。

我似乎無法找到的是將關聯對象和多對多關係與左右兩側相同的正確方法。

所以,從我花了永遠嘗試按摩到版的簡單,樸素,並且顯然是錯誤的版本開始:

t_groups = Table('groups', metadata, 
    Column('id', Integer, primary_key=True), 
) 

t_group_groups = Table('group_groups', metadata, 
    Column('parent_group_id', Integer, ForeignKey('groups.id'), primary_key=True, nullable=False), 
    Column('child_group_id', Integer, ForeignKey('groups.id'), primary_key=True, nullable=False), 
    Column('expires', DateTime), 
) 

mapper(Group_To_Group, t_group_groups, properties={ 
    'parent_group':relationship(Group), 
    'child_group':relationship(Group), 
}) 

什麼是映射這種關係正確方式?

回答

5

我猜你越來越像Could not determine join condition between parent/child tables... 錯誤在這種情況下,更改映射爲Group_To_Group以下幾點:

mapper(Group_To_Group, t_group_groups, properties={ 
    'parent_group':relationship(Group, 
     primaryjoin=(t_group_groups.c.parent_group_id==t_groups.c.id),), 
    'child_group':relationship(Group, 
     primaryjoin=(t_group_groups.c.child_group_id==t_groups.c.id),), 
}) 

你也可能要添加的backref,使您可以導航到關係還有Group對象。

+0

昨晚我一定在做一些微妙的錯誤。儘管如此,謝謝! – 2010-06-15 20:12:17