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'))
我想做的可能很简单,但我至少花了几个小时来解决这个问题,我可能只是把这里的事情复杂化了,但我希望得到一些帮助,奖金详细说明点。
注意:我已阅读此内容,并尝试结合我认为基于已接受答案的解决方案,但出于某种原因我仍然无法解决此问题
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'))