Проблема отображения SQLAlchemy - PullRequest
0 голосов
/ 11 апреля 2010

Я пытаюсь в 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'

Что не так?

1 Ответ

1 голос
/ 11 апреля 2010

Если вы хотите, чтобы между объединенными группами и группами была связь «один ко многим», внешний ключ должен быть в таблице групп. Это просто не имеет никакого смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...