创建表一对一关系的问题

时间:2010-10-25 17:41:38

标签: python sqlalchemy

当我尝试创建一对一关系表时,我收到错误。屏幕包含crm和crm包含更多类。 crm之间的关系是一对一的,所以我想使用屏幕id作为crm中的主键。并且crm和某些类之间的关系是一对一的,我只添加了一个类作为示例,因此crm的子节点必须包含一个屏幕id作为主键。当我试图建立最后的关系时,它就会在它破裂时发生。我试着同时使用crm id和screen id。

我没有工作。当我尝试在ContactInformation中使用crm id时出现“UnmappedClassError”等错误,并且“无法确定关系CRM.contactInformation上的父/子表之间的连接条件。指定'primaryjoin'表达式。如果这是多个 - 当我试图在ContactInformation中使用屏幕ID时,需要“secondaryjoin”。

这些是我的课程:

   class Screen(rdb.Model):
        """Set up screens table in the database"""
        rdb.metadata(metadata)
        rdb.tablename("screens")

        id = Column("id", Integer, primary_key=True)
        title = Column("title", String(100))
        ....

        crm = relationship("CRM", uselist=False, backref="screens")

class CRM(rdb.Model):
    """Set up crm table in the database"""
    rdb.metadata(metadata)
    rdb.tablename("crms")

    id = Column("id", Integer, ForeignKey("screens.id"), primary_key=True)

    contactInformation = relationship("crm_contact_informations", uselist=False, backref="crms")
        ....

class CRMContactInformation(rdb.Model):
    """Set up crm contact information table in the database"""
    rdb.metadata(metadata)
    rdb.tablename("crm_contact_informations")

    **id = Column("id", Integer, ForeignKey("screens.id"), primary_key=True)**
    owner = Column("owner", String(50))
       ...

1 个答案:

答案 0 :(得分:0)

首先,为什么3个表都具有1:1的关系?符合2NF标准的单个表应该可以更好地工作。

但是如果您仍然需要3个表,请尝试将crm_contact_informations与crms相关联,而不是屏幕:

id = Column("id", Integer, ForeignKey("crms.id"), primary_key=True)