python - SQLAlchemy 模糊外键
问题描述
我有两个班,User
和Address
。一个用户可以有多个地址和一个默认地址。我试过这个 SQLAlchemy 代码。
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
from sqlalchemy import ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
default_address_id = Column(Integer, ForeignKey('addresses.id'))
name = Column(String)
fullname = Column(String)
nickname = Column(String)
addresses = relationship("Address", order_by="Address.id", back_populates="user")
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
email_address = Column(String, nullable=False)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", back_populates="addresses")
Base.metadata.create_all(engine)
它导致错误
sqlalchemy.exc.AmbiguousForeignKeysError: Could not determine join condition between parent/child tables on relationship User.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.
我试图增加foreign_keys
这种关系,但我无法做到正确。
解决方案
这不是正确的方法,您应该从用户表的 default_adderess_id 中删除外键。如果您想在默认地址和其他地址之间有所不同,您可以在地址表中再添加一个字段作为类型
推荐阅读
- html - CSS Marquee 超出了较小设备上的屏幕尺寸
- python - 如何将正则表达式包含在 if-else 条件中?[请阅读说明]
- postgresql - 如何提取 bzipped PostgreSQL 转储的一部分
- javascript - 无法以 HTML 格式打印表格
- javascript - React JSX 选择性地将属性传递给组件
- c++ - 如何让我的程序运行直到付款为 0?
- javascript - 在 Azure Function 中运行 Playwright
- vue.js - 我们需要销毁/断开 Vue.observable 吗?
- pandas - scipy 优化模型返回所有 nan 解决方案
- jmeter - 如何在 CLI 模式下加载多个 jmeter 属性文件