1

I'm newbie in Sqlalchemy. I have 2 objects User and Product. I want to create relationship between them.

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)

But I get the error sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InvalidForeignKey) there is no unique constraint matching given keys for referenced table "user". If I remove relationship, it works but this is not my purpose. How can I fix it? And I want to ask why we should use relationship?

1 Answer 1

1

You have no column that connects user with product, so sqlalchemy has no way of resolving the relationship. relationship is a helper that helps you with providing/receiving objects of the given type instead of just the key value.

You still need to have the actual column that connects the tables available, such as either user_id on Product or product_id on User, so that relationship is able to find out how User and Product is connected.

Since your username column is connected to an agent table and not a user table, SQLAlchemy has no way to use that column to link the two tables. Either add a separate user_username (or better yet, use an actual autoincrementing id with primary_key=True set, so that you get unique ids for each User and Product) field with a ForeignKey that links to the user table, or change your current ForeignKey to link to user instead of agent.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.