我是Sqlalchemy的新手。我有两个对象User和Product。我想在它们之间建立关系。
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".
如果我解除关系,它会起作用,但这不是我的目的。我如何修复它?我想问为什么我们要用关系?
没有连接user
和product
的列,因此sqlalchemy无法解决这一关系。relationship
是一个帮助您提供/接收给定类型的对象而不仅仅是键值的帮助器。
您仍然需要有连接表的实际列,例如Product
上的user_id
或User
上的product_id
,以便relationship
能够发现User
和Product
是如何连接的。
由于username
列连接到agent
表而不是user
表,因此SQLAlchemy无法使用该列链接两个表。或者添加一个单独的user_username
(或者更好的是,使用一个实际的自动递增的id
和primary_key=True
集合,这样你就可以为每个用户和产品获得唯一的id)字段与一个链接到用户表的ForeignKey,或者将当前的ForeignKey更改为链接到user
而不是agent
。