SQLAlchemy 两个关系相同 table

SQLAlchemy two relationships to same table

我想做的可能很简单,但我至少花了几个小时来解决这个问题,我可能只是把这里的事情复杂化了,但我希望得到一些帮助,奖金详细说明点。

注意:我已阅读此内容,并尝试结合我认为基于已接受答案的解决方案,但出于某种原因我仍然无法解决此问题

class Orders(db.Model)
    id = db.Column(db.Integer, primary_key=True)
    dest_address = db.relationship('Address', backref='orders')
    from_address = db.relationship('Address', backref='orders')

class Address(db.Model)
    id = db.Column(db.Integer, primary_key=True)
    order_id = db.Column(db.Integer, db.ForeignKey('orders.id'))

所以基本上,我希望在一个特定模型中有 2 个独立的一对一关系,每个关系都指向相同的模型,我不完全确定如何正确地做到这一点

我已经尝试将 is_dest_address = db.Column(db.Boolean, default=True) 字段添加到我的地址 Class 并在关系中指定 primaryjoin 条件,以及在中定义 foreign_keys 参数关系(foreign_keys 参数是 Address.id

但我不完全确定如何正确地执行此操作。

此外,可能值得一提的是,我的 User 模型与 Orders 模型以及 Address 模型

有关系

我也尝试过这个,这是我尝试过的所有尝试中最接近的:

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    is_dest_address = db.Column(db.Boolean, default=True)

class Orders(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    dest_address_id = db.Column(db.Integer, db.ForeignKey('address.id'))
    from_address_id = db.Column(db.Integer, db.ForeignKey('address.id'))
    dest_address = db.relationship('Address', backref='orders', uselist=False, foreign_keys=[dest_address_id])
    from_address = db.relationship('Address', backref='orders', uselist=False, foreign_keys=[from_address_id])

我收到这个错误: sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系 Orders.from_address 上 parent/child table 之间的连接条件 - 有多个外键路径链接 table。指定 'foreign_keys' 参数,提供应计为包含对父 table.

的外键引用的那些列的列表

理想情况下,我可以只使用后面的代码并指定一个 primaryjoin 或类似的东西来确定哪个地址存储为哪个 field/relationship,基于 is_dest_address 是否为 True/False

注意:据我所知,我正在做文档所说的事情 https://docs.sqlalchemy.org/en/14/orm/join_conditions.html

解决了

class Orders(db.Model):
  dest_address = db.relationship('Address', backref='orders_dest_address')
  from_address = db.relationship('Address', backref='orders_from_address')

class Address(db.Model):
  order_id = db.Column(db.Integer, db.ForeignKey('orders.id'))