Python sqlalchemy:与声明性
在SQLAlchemy中,使用声明性语句创建一对一关系的最佳方法是什么 我有两个表,Python sqlalchemy:与声明性,python,sqlalchemy,Python,Sqlalchemy,在SQLAlchemy中,使用声明性语句创建一对一关系的最佳方法是什么 我有两个表,foo和bar,我希望foo.bar\u id链接到bar。问题是这是一种单向的一对一关系条形图不得了解任何有关foo的信息。对于每个foo,都将有且只有一个bar 理想情况下,在选择一个foo之后,我可以这样做: myfoo.bar.whatever = 5 使用声明式实现这一点的最佳方法是什么?事实证明,这其实非常简单。在您的Foo模型中: bar_id = Column(Integer, Foreign
foo
和bar
,我希望foo.bar\u id
链接到bar
。问题是这是一种单向的一对一关系<代码>条形图不得了解任何有关foo
的信息。对于每个foo,都将有且只有一个bar
理想情况下,在选择一个foo之后,我可以这样做:
myfoo.bar.whatever = 5
使用声明式实现这一点的最佳方法是什么?事实证明,这其实非常简单。在您的Foo模型中:
bar_id = Column(Integer, ForeignKey(Bar.id))
bar = relationship(Bar)
如果您想要真正的一对一关系,还必须在关系定义中使用“uselist=False”
bar_id = Column(Integer, ForeignKey(Bar.id))
bar = relationship(Bar, uselist=False)
文件:
或
我认为如果这是一个真正的一对一关系,我们应该为外键添加一个唯一性约束,这样其他父项就不能有其他父项和子项!!像这样:
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)
这并不完全正确,因为如果联接的FK与关系定义在同一个类中,则
uselist
关键字没有影响。有关正确的解决方案,请参阅。
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)