【发布时间】:2014-08-19 23:16:37
【问题描述】:
我将类映射到 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)
谢谢。
【问题讨论】:
-
为什么你不能给具有
ForeignKey到Node.nid的列提供不同的name?可能是node_nid = Column(Integer, ForeignKey('Node.nid'))之类的? -
我不能给另一个名字,因为我使用现有的数据库。我不能改变结构。
-
SA 模型中的 name 将不会更改数据库中列的名称。尽管如此,在数据库上,您也不能拥有包含两列同名的表。所以我的问题是:
node_field_data上的列名称是什么,它是表node的ForeignKey。 -
表node_field_data中的nid应该是外键。
-
所以你的PK也是FK。在这种情况下,只需执行
nid = Column(Integer, ForeignKey('Node.nid'), primary_key=True)。如果您的关系确实是1-to-1,那么您还应该在其定义中添加一个参数uselist=False。
标签: python sqlalchemy one-to-one