【发布时间】: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 为什么会这样?密码和用户不应该是一对一的关系吗?我在帖子中引用的指南表明父母和孩子都应该有关系
-
您使用了反向引用,因此您可以通过用户名和密码访问它。所以你只需要定义一次关系
标签: python database sqlite sqlalchemy