Sqlalchemy: ошибка отношения «многие ко многим» - PullRequest
1 голос
/ 13 мая 2010

Дорогие все, я следую отношениям «многие ко многим», описанным в http://www.sqlalchemy.org/docs/mappers.html#many-to-many

#This is actually a VIEW
tb_mapping_uGroups_uProducts = Table( 'mapping_uGroups_uProducts', metadata,
    Column('upID', Integer, ForeignKey('uProductsInfo.upID')),
    Column('ugID', Integer, ForeignKey('uGroupsInfo.ugID'))
)

tb_uProducts = Table( 'uProductsInfo', metadata, 
    Column('upID', Integer, primary_key=True)
)
mapper( UnifiedProduct, tb_uProducts)

tb_uGroupsInfo = Table( 'uGroupsInfo', metadata, 
    Column('ugID', Integer, primary_key=True)
)
mapper( UnifiedGroup, tb_uGroupsInfo, properties={
    'unifiedProducts': relation(UnifiedProduct, secondary=tb_mapping_uGroups_uProducts, backref="unifiedGroups")
})

где отношения между uProduct и uGroup - N: M.

Когда я запускаю следующее

sess.query(UnifiedProduct).join(UnifiedGroup).distinct()[:10]

Я получаю сообщение об ошибке:

sqlalchemy.exc.ArgumentError: Can't find any foreign key relationships between 'uProductsInfo' and 'uGroupsInfo'

Что я делаю не так?

РЕДАКТИРОВАТЬ: я нахожусь на MyISAM, который не поддерживает внешние ключи

1 Ответ

2 голосов
/ 13 мая 2010

Наличие определений внешнего ключа в схеме SQLAlchemy достаточно, они не являются обязательными в реальной таблице. Между вашими моделями нет прямой внешней связи, поэтому SQLAlchemy не может их найти. Укажите отношение для явного присоединения:

sess.query(UnifiedProduct).join(UnifiedProduct.unifiedGroups).distinct()[:10]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...