我正在尝试将一个表链接到自身。我有可以包含更多媒体组的媒体组。我创建了许多关系:
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>
当我创建表格时,我没有收到任何错误,只是当我添加任何元素时。 任何想法???
提前致谢!
答案 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)