远程端和本地端有什么区别?
给定一个模型,如:
class Parent(Base):
# ...
id = Column(Integer, primary_key=True)
children = relationship("Child")
class Child(Base):
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey('parent.id'))
关于关系Parent.children
,存在的列Parent
是local
侧,存在的列是Child
远程侧。
这似乎有点微不足道,只有当你有所谓的“自我参照”关系时才会变得有趣,双方都引用同一张表:
class Parent(Base):
# ...
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey('parent.id'))
children = relationship("Parent")
其中,Parent.id
是本地端,Parent.children
是Parent.parent_id
远程端,基于Parent -> .children -> Parent
考虑左侧是“本地”,右侧是“远程”。
如果有 remote_side 那么为什么没有 local_side 呢?
有一个本地方面,如果你说 Parent.children.property.local_side 你会看到它。 remote_side
并且local_side
只是关系需要担心的事情,并且remote_side
是公开的,您可以设置只是为了通过自我参照关系向关系提供提示;没有其他的。
在此处给出的示例中,parent_id“本地”端如何?
如果你有Node.parent
,那看起来像 Node --> .parent --> Node
。“本地”表示左侧,“远程”表示右侧。多对一自引用连接的方式类似于Node.parent_id = Node.id
,因此 parent_id 是本地的。
remote_side 接受一个列表,那么该列表的元素应该是什么?如果它们是一个以上的元素,那么这到底意味着什么?
这是一个列表,因为在 SQLAlchemy 中,所有主键和外键都可能是复合的,也就是说,由多个列组成。在代理键的典型情况下,它是一个元素的列表。
remote_side
总的来说,除非在非常特殊的多对一自引用关系的情况下,否则您永远不需要使用。否则永远不需要它。