【问题标题】:Python - sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InvalidForeignKey) there is no unique constraint matching given keys for referenced tablePython - sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InvalidForeignKey) 没有唯一约束匹配给定键的引用表
【发布时间】:2021-12-11 11:39:05
【问题描述】:

我是 Sqlalchemy 的新手。我有 2 个对象用户和产品。我想在他们之间建立关系。

from sqlalchemy import Column, String, Boolean, create_engine, ForeignKey, PrimaryKeyConstraint
from sqlalchemy.orm import relationship

class User():
     __tablename__ = 'user'
     username= Column(String, primary_key = True)
     random_string = Column(String)

class Product():
     __tablename__ = 'product'
     username= Column(String, ForeignKey('user.username'))
     productname = Column(String)
     status = Column(Boolean)
     usr = relationship("User", back_populates="product")

 Base.metadata.create_all(engine)

但我收到错误 sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InvalidForeignKey) there is no unique constraint matching given keys for referenced table "user". 如果我删除关系,它会起作用,但这不是我的目的。 我该如何解决?我想问为什么我们应该使用关系?

【问题讨论】:

    标签: python postgresql sqlalchemy orm fastapi


    【解决方案1】:

    您没有将userproduct 连接起来的列,因此sqlalchemy 无法解决这种关系。 relationship 是一个帮助器,可帮助您提供/接收给定类型的对象,而不仅仅是键值。

    您仍然需要连接可用表的实际列,例如Product 上的user_idUser 上的product_id,以便relationship 能够找出User 的方式和Product 已连接。

    由于您的username 列连接到agent 表而不是user 表,SQLAlchemy 无法使用该列来链接这两个表。要么添加一个单独的user_username(或者更好的是,使用实际的自动递增idprimary_key=True 集,以便您获得每个用户和产品的唯一ID)字段与链接到用户表的ForeignKey,或更改您当前的 ForeignKey 链接到 user 而不是 agent

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 2017-08-11
      • 1970-01-01
      • 2016-04-13
      • 2022-09-27
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多