Я пытаюсь в sqlalchemy правильно отобразить мои данные. Обратите внимание, что единая группа - это группа групп. (Одна унифицированная группа отображается на несколько групп, но каждая группа может отображаться только на одну уг).
Так что в основном это определение моей объединенной группы:
CREATE TABLE `unifiedGroups` (
`ugID` INT AUTO_INCREMENT,
`gID` INT NOT NULL,
PRIMARY KEY(`ugID`, `gID`),
KEY( `gID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
;
Обратите внимание, что каждая строка представляет собой кортеж ugID, gID. (Я не знаю заранее, сколько gID приходится на ugID, так что это, вероятно, самый разумный и самый простой метод).
Определение для моего класса 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'
Что не так?