Как связать одну таблицу с собой? - PullRequest
1 голос
/ 12 августа 2010

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

media_group_groups = Table(
            "media_group_groups",
            metadata,
            Column("groupA_id", Integer, ForeignKey("media_groups.id")),
            Column("groupB_id", Integer, ForeignKey("media_groups.id"))
        )

class MediaGroup(rdb.Model):
    """Represents MediaGroup class. Conteins channels and other media groups"""
    rdb.metadata(metadata)
    rdb.tablename("media_groups")

    id = Column("id", Integer, primary_key=True)
    title = Column("title", String(100))
    parents = Column("parents", String(512))

    channels = relationship(Channel, secondary=media_group_channels, order_by=Channel.titleView, backref="media_groups")
    mediaGroup = relationship("MediaGroup", secondary=media_group_groups, order_by="MediaGroup.title", backref="media_groups")

Я получил эту ошибку:

"ArgumentError: Не удалось определить условие соединения между родительскими / дочерними таблицами в отношении MediaGroup.mediaGroup. Укажите выражение« primaryjoin ». Если это отношение« многие ко многим », то также требуется и« secondjoin »». 1006 *

Когда я создаю таблицы, я не получаю никакой ошибки, это просто когда я добавляю в нее какой-либо элемент. Любая идея ???

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 12 августа 2010

SQLAlchemy не может определить, к каким столбцам в таблице ссылок нужно присоединиться.Попробуйте это для relationship:

mediaGroup = relationship("MediaGroup",
        secondary=media_group_groups,
        order_by="MediaGroup.title",
        backref=backref('media_groups', 
                        secondary="media_media_groups",
                        primaryjoin= id == "groupB_id",
                        secondaryjoin = id == "groupA_id",
                        foreignkeys = ["groupA_id", "groupB_id"] ),  
        primaryjoin = id == "groupA_id",
        secondaryjoin = id == "groupB_id")

. Возможно, потребуется некоторая корректировка - если это не сработает, попробуйте с именами столбцов объединения, которые будут похожи на "media_media_groups.groupA_id".

0 голосов
/ 12 августа 2010

Я могу ошибаться, но я не думаю, что вы можете связать таблицу со многими многими, не так ли?

Вам нужно было бы хранить ссылки в ваших записях, и те, возможно, должны были бы иметь возможность ссылаться на все остальные строки в таблице, нет? Может показаться, что в этом случае ваши столбцы должны будут расширяться так же быстро, как и ваши записи.

А как насчет отдельной таблицы, которая просто содержит ваши отношения?

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