如何更好地理解sqlalchemy中的“远程侧”?

如何更好地理解sqlalchemy中的“远程侧”?,sqlalchemy,Sqlalchemy,我一直在研究sqlalchemy的自我参照表。我已经阅读了很多次文档,但仍然难以理解remote\u-side的概念。有人能画一张图表或用一个类比来帮助解释这个概念吗?我认为可视化是一种更好的方式,但任何有帮助的都会被感激。谢谢 编辑:顺便说一下,在我看来,remote这个词有点模糊,因为它可以从不同的角度进行解释。就像单词left和rigt一样,它实际上取决于你面对的方向,我的right可能就是你的left。我对此不是很有信心,但我想把名字从远程端链接到多个端会有帮助吗?如果我在这里错了,请纠

我一直在研究sqlalchemy的自我参照表。我已经阅读了很多次文档,但仍然难以理解
remote\u-side
的概念。有人能画一张图表或用一个类比来帮助解释这个概念吗?我认为可视化是一种更好的方式,但任何有帮助的都会被感激。谢谢


编辑:顺便说一下,在我看来,
remote
这个词有点模糊,因为它可以从不同的角度进行解释。就像单词
left
rigt
一样,它实际上取决于你面对的方向,我的
right
可能就是你的
left
。我对此不是很有信心,但我想把名字从
远程端
链接到
多个端
会有帮助吗?如果我在这里错了,请纠正我。

既然似乎没有人对这样一个初学者的概念感兴趣,我将尽我最大的努力来解决这个问题

首先想象两个相同的表,一个在左边,另一个在右边。现在深呼吸

通过将
remote\u-side
指定给外键引用的属性,实际上可以建立从本地到远程的关系

现在的问题是,我可以为外键属性本身指定
remote\u sed
?让我们通过做一个实验来了解差异:

class Employee(Base):
    __tablename__ = 'employees'
    id = Column(Integer(), primary_key=True)
    manager_id = Column(Integer(), ForeignKey('employees.id'))
    name = Column(String(255), nullable=False)
    Manager = relationship("Employee", backref=backref('reports'), remote_side=[manager_id])
运行此操作时,会出现以下错误:

sqlalchemy.exc.ArgumentError: Employee.Manager and back-reference Employee.reports are both of the same direction symbol('ONETOMANY').  Did you mean to set remote_side on the many-to-one side ?

显然,这不起作用。我们陷入了单向暴政。

如果你要投票否决我的答案,请分享你的一些想法,不要忽视它,加油!,如果你想要多对一
reports=relationship('Employee',backref=backref('Manager',remote_-side=[id]))
,如果您想要一对多,使用多对一backref。这个答案是关于什么的还有些不清楚。为什么还要将外键定义为远程键?这与外键的含义相反。您的意思是,如果将外键定义为远程,它将形成一对多,其中引用的键是本地键,外键是远程键吗?这就是SQLAlchemy假设的,如果您只是跳过定义远程端。remote,如remote-to-this关系,而本地,如定义此关系的位置。