SQLAlchemy Mapping问题

时间:2010-04-11 16:19:20

标签: python sqlalchemy

我正在尝试sqlalchemy正确映射我的数据。请注意,统一组基本上是一组组。 (一个unifiedGroup映射到许多组,但每个组只能映射到一个ug)。

所以基本上这是我的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时,我得到一个空列表[], 而groupInstance.unifiedGroup.groups返回一个错误: AttributeError:'InstrumentedList'对象没有属性'groups'

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 个答案:

答案 0 :(得分:1)

如果要在统一组和组之间建立一对多关系,则需要将外键放在groups表中。任何其他方式都没有意义。