2010-08-12 18 views
1

我想链接一个表本身。我有媒体组可以包含更多的媒体组。我创建了多对多的关系:如何将一张桌子连接到自己?

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'。“

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

提前致谢!

回答

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”贯穿始终。

+0

我试过了,但我得到一个不同的错误: “引发ArgumentError:无法确定primaryjoin条件关系的方向。‘media_groups.id =:ID_1’,对关系MediaGroup.mediaGroup不要在‘foreign_keys’列代表只有这个连接条件中的'外部'列?“ 我试图解决它,但如果您有任何想法,请让我知道。 谢谢! – bribon 2010-08-12 18:47:11

+0

看起来像backref的问题。调整我的答案。 – 2010-08-12 19:02:25

+0

另请注意,这里的名称有点令人困惑。 'MediaGroup.mediaGroup'是'groupA'到'groupB'链接的列表,而'MediaGroup.media_groups'是'groupB'到'groupA'链接的列表。如果你确实需要backref,我会给它们命名为“子组”和“超级组”或者任何对你的模型有意义的东西。 – 2010-08-12 19:09:58

0

我可能是错的,但我不认为你可以链接一个表到自己多对多,你能吗?

您需要将链接存储在您的记录中,并且这些链接可能需要能够链接到表中的每一行,否?在这种情况下,您的专栏似乎需要像您的记录一样快速扩展。

怎么样一个单独的表,只是包含你的关系?

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