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