SQLAlchemy:如何消除外键关系的歧义?

问题描述

我有一个简单的客户和地址数据模型,带有 sql Alchemy 注释,使对象可以在数据库中持久化。不幸的是,当我尝试使用 c = Customer() 创建客户对象时,我收到一个错误

sqlalchemy.exc.AmbiguousForeignKeysError: Could not determine join condition between parent/child
tables on relationship Customer.addresses - there are multiple foreign key paths linking the tables.
Specify the 'foreign_keys' argument,providing a list of those columns which should be counted as
containing a foreign key reference to the parent table.

这很清楚——我需要进一步注释该行:

addresses = relationship("Address",back_populates="customer")

用一些东西来消除外键关系的歧义。但是,我无法理解在这种情况下我需要(或可以)指定什么。有人能指出我正确的方向吗?

更新:进一步看,在我看来,sqlAlchemy 正在尝试推断 addresses 关系的方向并且无法这样做,因为有是这些类之间各个方向的 PK/FK 关系。这无法通过在 foreign_keys= 关系上添加 addresses解决,因为此关系的外键在另一个表中。

我可以通过从 addresses 中完全删除 Customer 关系,而是在 Address 类中执行 customer = relationship("Customer",backref="addresses",foreign_keys=[customer_id]) 来实现这一点。但是,我不太喜欢这个解决方案,因为我想在 addresses 类中“表达”Customer,而不是作为在customer 类。

因此,仍在寻找修改 Address 关系以使其工作的方法

这是我的整个模型:

addresses

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)