2010-04-11 156 views
0

我正在嘗試sqlalchemy來正確映射我的數據。請注意,統一的組基本上是一組組。 (一個統一組映射到許多組,但每個組只能映射到一個ug)。SQLAlchemy映射問題

所以基本上這是我unifiedGroups的定義:

CREATE TABLE `unifiedGroups` (  
    `ugID` INT AUTO_INCREMENT, 
    `gID` INT NOT NULL, 
    PRIMARY KEY(`ugID`, `gID`), 
    KEY(`gID`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 
; 

注意,每一行是一個UGID,GID元組。 (我不知道每ugID有多少gID,所以這可能是最明智和最簡單的方法)。

我UnifiedGroup類定義

class UnifiedGroup(object): 
    """UnifiedProduct behaves very much like a group 
    """ 
    def __init__(self, ugID): 
     self.ugID=ugID 

     #Added by mapping 
     self.groups=False 

    def __str__(self): 
     return '<%s:%s>' % (self.ugID, ','.join([g for g in self.groups])) 

這是我的映射表:

tb_groupsInfo = Table('groupsInfo', metadata, 
    Column('gID', Integer, primary_key=True), 
    Column('gName', String(128)), 
) 

tb_unifiedGroups = Table('unifiedGroups', metadata, 
    Column('ugID', Integer, primary_key=True), 
    Column('gID', Integer, ForeignKey('groupsInfo.gID')), 
) 

我以下列方式映射貼圖:

mapper(UnifiedGroup, tb_unifiedGroups, properties={ 
    'groups': relation(Group, backref='unifiedGroup') 
}) 

然而,當我試圖做groupInstance.unifiedGroup,我得到一個空的列表[], while groupInstance.unifiedGroup.groups返回我一個錯誤: AttributeError的: 'InstrumentedList' 對象有沒有屬性 '組'

Traceback (most recent call last): 
    File "Mapping.py", line 119, in <module> 
    print p.group.unifiedGroup.groups 
AttributeError: 'InstrumentedList' object has no attribute 'groups' 

有什麼不對?

回答

1

如果要在統一組和組之間建立一對多關係,則需要將外鍵放在組表中。這根本沒有任何其他意義。