Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将一个表链接到自身?_Python_Sqlalchemy - Fatal编程技术网

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(…)
构造函数,指定反向关系应该如何工作,如上面的代码所示。