Sql 什么是本地和远程?

Sql 什么是本地和远程?,sql,sqlalchemy,relationship,Sql,Sqlalchemy,Relationship,下面的问题与数据库表关系以及SQLAlchemy为其提供的抽象有关 远程端和本地端的区别是什么 如果有远程侧,那么为什么没有本地侧 在给出的示例中,parent\u id是如何“本地”的 remote\u side包含一个列表,那么该列表的元素是什么 列表应该是什么?如果它们是多个元素,那么 这到底意味着什么 我已经读了好几遍了,但是没有理解它背后的基本概念以及如何恰当地使用它。(几乎)我所知道的是,它应该将一对多关系转换为多对一关系。通常,当我尝试使用它时,在我觉得它相关的地方,我会引入SQL

下面的问题与数据库表关系以及SQLAlchemy为其提供的抽象有关

  • 远程端和本地端的区别是什么
  • 如果有
    远程侧
    ,那么为什么没有
    本地侧
  • 在给出的示例中,
    parent\u id
    是如何“本地”的
  • remote\u side
    包含一个
    列表
    ,那么该列表的元素是什么
    列表
    应该是什么?如果它们是多个元素,那么 这到底意味着什么
  • 我已经读了好几遍了,但是没有理解它背后的基本概念以及如何恰当地使用它。(几乎)我所知道的是,它应该将一对多关系转换为多对一关系。通常,当我尝试使用它时,在我觉得它相关的地方,我会引入SQLAlchemy所抱怨的模糊性,在大多数情况下,通过删除
    远程端
    参数来修复这些模糊性

    远程端和本地端的区别是什么

    假设模型如下:

    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,很好的解释。谢谢你,迈克!我对
    属性有同样的问题。远程
    ,找不到它。