如何更好地理解sqlalchemy中的`remote_side`?

时间:2017-07-20 17:29:13

标签: sqlalchemy

我一直在研究sqlalchemy的自我参考表。我已多次阅读文档,但仍然难以理解remote_side的概念。有人可以画图或用类比来帮助解释这个概念吗?我认为可视化是一种更好的方式,但任何有用的东西都会受到赞赏。感谢。

编辑:顺便说一下,在我看来,remote这个词有点模糊,因为它可以从不同的角度来解释。与单词leftrigt一样,它实际上取决于您面向的方向,right可能是您的left。我对此并不是很有信心,但我想从remote_sidemany_side的名字可能有帮助吗?如果我在这里错了,请纠正我。

1 个答案:

答案 0 :(得分:-1)

由于似乎没有人对这样的初学者概念感兴趣,我会尽力去攻击这个。

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

通过为外键引用的属性指定remote_side,您实际建立了从本地到relmote的关系。

现在的问题是,我可以为外键属性本身指定remote_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 ?

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