如何将一个表链接到自身?

时间:2010-08-12 17:07:16

标签: python sqlalchemy

我正在尝试将一个表链接到自身。我有可以包含更多媒体组的媒体组。我创建了许多关系:

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'表达式。如果这是多对多关系,则还需要'secondaryjoin'。”< / p>

当我创建表格时,我没有收到任何错误,只是当我添加任何元素时。 任何想法???

提前致谢!

2 个答案:

答案 0 :(得分:1)

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”。

答案 1 :(得分:0)

我可能错了,但我不认为你可以将一张桌子连接到自己的多对多,你呢?

您需要将链接存储在您的记录中,而这些链接可能需要能够链接到表中的每一行,不是吗?在这种情况下,您的列似乎需要像记录一样快速扩展。

仅包含您的关系的单独表怎么样?

tbl_links (id, primaryMediaGroupID, linkedMediaGroupID)
相关问题