Python 如何将一个表链接到自身?
我正在尝试将一个表链接到它自己。我有可以包含更多媒体组的媒体组。我创造了一种多对多的关系:Python 如何将一个表链接到自身?,python,sqlalchemy,Python,Sqlalchemy,我正在尝试将一个表链接到它自己。我有可以包含更多媒体组的媒体组。我创造了一种多对多的关系: media_group_groups = Table( "media_group_groups", metadata, Column("groupA_id", Integer, ForeignKey("media_groups.id")), Column("groupB_id", Integer, Foreig
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”
当我创建表时,我没有得到任何错误,只是在向表中添加任何元素。
有什么想法吗
提前谢谢 我可能错了,但我不认为你可以将一个表与它自身进行多对多的链接,对吗 您需要将链接存储在记录中,这些记录可能需要能够链接到表中的其他每一行,不是吗?在这种情况下,您的列似乎需要像您的记录一样快速扩展 单独的一个表只包含您的关系怎么样
tbl_links (id, primaryMediaGroupID, linkedMediaGroupID)
我可能错了,但我不认为你能把一张表和它自己多对多联系起来,对吗 您需要将链接存储在记录中,这些记录可能需要能够链接到表中的其他每一行,不是吗?在这种情况下,您的列似乎需要像您的记录一样快速扩展 单独的一个表只包含您的关系怎么样
tbl_links (id, primaryMediaGroupID, linkedMediaGroupID)
SQLAlchemy无法确定链接表中要加入的列。对
关系尝试以下操作:
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\u media\u groups.groupA\u id”。SQLAlchemy无法确定链接表中要联接的列。对关系尝试以下操作:
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\u media\u groups.groupA\u id”。我尝试过,但出现了不同的错误:ArgumentError:无法确定关系MediaGroup.MediaGroup上的primaryjoin条件“media\u groups.id=:id\u 1”的关系方向。“外键”中的列是否仅表示此联接条件中的“外键”列?“我正试图解决这个问题,但如果你有什么想法,请告诉我。谢谢看起来backref有问题。调整我的答案。还要注意,这里的名字有点混乱MediaGroup.MediaGroup
是groupA
到groupB
链接的列表,而MediaGroup.media\u groups
是groupB
到groupA
链接的列表。如果您真的需要backref,我会给它们命名为子组
和超组
或任何对您的模型有意义的名称。是的,我的名称错了,我修复了它。我尝试了你写的同样的方法,但我也没有成功。我也犯了同样的错误。这就是我尝试过的:mediaGroups=relationship(“MediaGroup”,secondary=media\u group\u groups),order\u by=“media group.title”,backref=“media\u groups”,primaryjoin=id==“media\u group\u groups.groupA\u id”,secondaryjoin=id==“media\u group\u groups.groupB\u id”,外键=[“media\u group\u group\u id”,“media\u groups.groups.groupB\u id”),有什么想法吗?谢谢你帮助我!您尝试的仍然是backref
的字符串。当您指定primaryjoin
和secondaryjoin
时,您需要将其转换为backref(…)
构造函数,指定反向关系应该如何工作,如上面的代码所示。我尝试了这一点,但出现了不同的错误:ArgumentError:无法确定关系MediaGroup.MediaGroup上的primaryjoin条件“media\u groups.id=:id\u 1”的关系方向。“外键”中的列是否仅表示此联接条件中的“外键”列?“我正试图解决这个问题,但如果你有什么想法,请告诉我。谢谢看起来backref有问题。调整我的答案。还要注意,这里的名字有点混乱MediaGroup.MediaGroup
是groupA
到groupB
链接的列表,而MediaGroup.media\u groups
是groupB
到groupA
链接的列表。如果您真的需要backref,我会给它们命名为子组
和超组
或任何对您的模型有意义的名称。是的,我的名称错了,我修复了它。我尝试了你写的同样的方法,但我也没有成功。我也犯了同样的错误。这就是我尝试过的:mediaGroups=relationship(“MediaGroup”,secondary=media\u group\u groups),order\u by=“media group.title”,backref=“media\u groups”,primaryjoin=id==“media\u group\u groups.groupA\u id”,secondaryjoin=id==“media\u group\u groups.groupB\u id”,外键=[“media\u group\u group\u id”,“media\u groups.groups.groupB\u id”),有什么想法吗?谢谢你帮助我!您尝试的仍然是backref
的字符串。当指定primaryjoin
和secondaryjoin
时,需要将其转换为backref(…)
构造函数,指定反向关系应该如何工作,如上面的代码所示。