2024-06-16 13:24:20 发布
网友
使用声明式在SQLAlchemy中创建一对一关系的最佳方法是什么?
我有两个表,foo和bar,我希望foo.bar_id链接到bar。关键是这是一种单向的一对一关系。bar不能知道foo的任何信息。对于每个foo,只有一个bar。
foo
bar
foo.bar_id
理想情况下,在选择foo之后,我可以这样做:
myfoo.bar.whatever = 5
使用声明性语句来实现这一点的最佳方法是什么?
文档explains this nicely:
class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) child = relationship("Child", uselist=False, backref="parent") class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parent.id'))
或者
class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) child_id = Column(Integer, ForeignKey('child.id')) child = relationship("Child", backref=backref("parent", uselist=False)) class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True)
我认为如果这是一个真正的一对一的关系,我们应该给外键添加一个唯一性约束,这样另一个父节点就不能有另一个父节点!!像这样:
class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) child_id = Column(Integer, ForeignKey('child.id'), unique=True) child = relationship("Child", backref=backref("parent", uselist=False)) class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True)
如果你想要一个真正的一对一关系,你还必须在你的关系定义中使用“uselist=False”。
bar_id = Column(Integer, ForeignKey(Bar.id)) bar = relationship(Bar, uselist=False)
文档explains this nicely:
或者
我认为如果这是一个真正的一对一的关系,我们应该给外键添加一个唯一性约束,这样另一个父节点就不能有另一个父节点!!像这样:
如果你想要一个真正的一对一关系,你还必须在你的关系定义中使用“uselist=False”。
相关问题 更多 >
编程相关推荐