/ / Relation un-à-un SQLAlchemy, primaire comme clé étrangère - sqlalchemy, one-to-one

SQLAlchemy relation un à un, primaire en tant que clé étrangère - sqlalchemy, un à un

Je mappe des classes sur des tables MySQL existantesgénéré par Drupal. Je dois me rapporter à des tables (un à un), mais j'ai un problème. Deux tables ont la colonne nid. Les deux champs sont des clés primaires. Je ne peux pas définir de clé étrangère sans clé primaire. non appliqué à une clé primaire. Ma version est ci-dessous.

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)

Je vous remercie.

Réponses:

8 pour la réponse № 1

D'après les commentaires:

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

La solution complète est:

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)