SQLalchemy:无法确定关系上的父/子表之间的连接条件
Posted
技术标签:
【中文标题】SQLalchemy:无法确定关系上的父/子表之间的连接条件【英文标题】:SQLalchemy: Could not determine join condition between parent/child tables on relationship 【发布时间】:2022-01-11 08:04:25 【问题描述】:所以我在尝试使用 SQLAlchemy 映射的同一个 python 文件中有这两个简单的类,其中用户列“password_id”也是表密码“password_id”列的外键
from sqlalchemy.orm import relationship, declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.sql.schema import ForeignKey
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
user_id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
password_id = Column(Integer, ForeignKey('password.password_id'))
parent = relationship("Password", back_populates="users")
class Password(Base):
__tablename__ = 'passwords'
password_id = Column(Integer, primary_key=True)
password = Column(String)
last_change_date = Column(DateTime)
valid_until = Column(DateTime)
child = relationship("User", back_populates="passwords", uselist=False)
这是上下文的数据库架构:
我正在关注来自 sql alchemy 的this guide,但由于某种原因,我不断收到标题中的错误“确保引用列与 ForeignKey 或 ForeignKeyConstraint 相关联,或者指定一个‘primaryjoin’表达式。” ,这很奇怪,因为根据我在指南中看到的内容,我的类已正确映射,因此我无法理解为什么会发生此错误。
提前谢谢你
【问题讨论】:
不要在两个类中添加关系。仅在 Password 类中添加关系,并将其从 User 类中删除 @HashirIrfan 为什么会这样?密码和用户不应该是一对一的关系吗?我在帖子中引用的指南表明父母和孩子都应该有关系 您使用了反向引用,因此您可以通过用户名和密码访问它。所以你只需要定义一次关系 【参考方案1】:我认为问题出在以下行(ForeignKey 中的表名)...
password_id = Column(Integer, ForeignKey('password.password_id'))
应该是密码而不是密码。
【讨论】:
就是这样!复杂的语法...谢谢!以上是关于SQLalchemy:无法确定关系上的父/子表之间的连接条件的主要内容,如果未能解决你的问题,请参考以下文章