繁体   English   中英

SQLAlchemy一对一关系,主要是外键

[英]SQLAlchemy one-to-one relation, primary as foreign key

我将类映射到Drupal生成的现有MySQL表。 我需要与表格(一对一)联系,但我遇到了问题。 两个表的列nid。 这两个字段都是主键。 没有主键我无法定义外键。 关系图不适用于主键。 我的版本如下。

class Node(Base):
    __tablename__ = 'node'
    nid = Column(Integer, primary_key=True)
    vid = Column(Integer)
    uuid = Column(String(128))
    type = Column(String)

    field_data = relationship("NodeFieldData", order_by="NodeFieldData.nid", backref="node")

    def __repr__(self):
        return "<User(nid='%s', vid='%s', uuid='%s', type='%s')>" % (self.nid, self.vid, self.uuid, self.type)

class NodeFieldData(Base):
    __tablename__ = 'node_field_data'
    nid = Column(Integer, primary_key=True)
    type = Column(String, nullable=False)
    title = Column(String, nullable=False)
    #nid = Column(Integer, ForeignKey('Node.nid'))

    def __repr__(self):
        return "<User(nid='%s', vid='%s', uuid='%s', type='%s')>" % (self.nid, self.vid, self.uuid, self.type)

谢谢。

根据评论:

nid = Column(Integer, ForeignKey(Node.nid), primary_key=True)

整个解决方案是:

Base = declarative_base()
class Node(Base):
    __tablename__ = 'node'
    nid = Column(Integer, primary_key=True)
    uuid = Column(String(128))
    vid = Column(Integer)
    type = Column(String)

    # Refferer.
    field_data = relationship('NodeFieldData', backref="node", uselist=False)

    def __repr__(self):
        return "<Node(nid='%s', uuid='%s', vid='%s', type='%s', title='%s')>" % (self.nid, self.uuid, self.vid, self.type, self.field_data.title)

class NodeFieldData(Base):
    __tablename__ = 'node_field_data'
    nid = Column(Integer, ForeignKey(Node.nid), primary_key=True)
    #vid = Column(Integer, primary_key=True)
    title = Column(String, nullable=False)

    def __repr__(self):
        return "<Node(nid='%s', title='%s')>" % (self.nid, self.title)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM