Sql 什么是本地和远程?
下面的问题与数据库表关系以及SQLAlchemy为其提供的抽象有关Sql 什么是本地和远程?,sql,sqlalchemy,relationship,Sql,Sqlalchemy,Relationship,下面的问题与数据库表关系以及SQLAlchemy为其提供的抽象有关 远程端和本地端的区别是什么 如果有远程侧,那么为什么没有本地侧 在给出的示例中,parent\u id是如何“本地”的 remote\u side包含一个列表,那么该列表的元素是什么 列表应该是什么?如果它们是多个元素,那么 这到底意味着什么 我已经读了好几遍了,但是没有理解它背后的基本概念以及如何恰当地使用它。(几乎)我所知道的是,它应该将一对多关系转换为多对一关系。通常,当我尝试使用它时,在我觉得它相关的地方,我会引入SQL
远程侧
,那么为什么没有本地侧
parent\u id
是如何“本地”的remote\u side
包含一个列表
,那么该列表的元素是什么
列表
应该是什么?如果它们是多个元素,那么
这到底意味着什么远程端
参数来修复这些模糊性
远程端和本地端的区别是什么
假设模型如下:
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
侧,而children
上的列是远程侧
这似乎有点琐碎,只有当你有一个所谓的“自我参照”关系,双方都参考同一张表时,才会变得有趣:
class Parent(Base):
# ...
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey('parent.id'))
children = relationship("Parent")
其中,Parent.id
是Parent.children
的本地侧,Parent.id
是远程侧,基于Parent->.children->Parent
考虑左侧为“本地”,右侧为“远程”
如果有远程端,为什么没有本地端
如果你说Parent.children.property.local_side,你就会看到它有一个本地的一面remote\u-side
和local\u-side
只是关系需要担心的事情,而remote\u-side
是公共的,因为您可以设置它只是为了给关系一个带有自指关系的提示;没有别的了
在这里给出的示例中,家长id是如何“本地”的
如果您有Node.parent
,则看起来像Node-->.parent-->Node
。“本地”表示左侧,“远程”表示右侧。多对一自引用联接的方式类似于Node.parent\u id=Node.id
,因此parent\u id是本地的
远程端接收一个列表,那么该列表的元素是什么
应该是吗?如果它们是一个以上的元素,那又是什么呢
这到底意味着什么
这是一个列表,因为在SQLAlchemy中,所有主键和外键都可能是复合键,也就是说,由多个列组成。在代理键的典型情况下,它是一个元素的列表
总的来说,您永远不需要使用
remote\u-side
,除非是在非常特殊的情况下使用多对一的自引用关系。否则就不需要它。在创建子属性时不会父属性
抱怨,因为它不会FK它?FK与“远程”不同。FKs是指在所有权意义上哪个数据库表引用了另一个数据库表。“local”和“remote”指的是您从哪个数据库表的透视图中查看(在自引用关系中,这是一个骗局,但可能假设有两个表——因为我们实际上在讨论两个不同的行)。@zzzeek API是否已更改?我看不见,在children上找到属性
属性。@zzzeek,很好的解释。谢谢你,迈克!我对属性有同样的问题。远程,找不到它。