car*_*arl 46 python sqlalchemy
使用声明式在SQLAlchemy中创建一对一关系的最佳方法是什么?
我有两个表,foo而且bar,我想foo.bar_id链接到bar.问题在于这是一种单向一对一的关系.bar一定不能知道foo.对于每一个foo,都会有一个且只有一个bar.
理想情况下,在选择foo后,我可以这样做:
myfoo.bar.whatever = 5
Run Code Online (Sandbox Code Playgroud)
使用声明式实现此目的的最佳方法是什么?
cha*_*lay 107
0.7的文档很好地解释了这一点:
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'))
Run Code Online (Sandbox Code Playgroud)
要么
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)
Run Code Online (Sandbox Code Playgroud)
Bre*_*Bim 35
如果您想要真正的一对一关系,您还必须在关系定义中使用"uselist = False".
bar_id = Column(Integer, ForeignKey(Bar.id))
bar = relationship(Bar, uselist=False)
Run Code Online (Sandbox Code Playgroud)
我认为如果它是真正的一对一关系,我们应该为外键添加唯一性约束,这样另一个父级就不能有另一个父级子级了!!像这样:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26170 次 |
| 最近记录: |