Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SqlAlchemy ForeignKey on different schema not found

So have 2 different models on 2 different schemas. One has a foreign key relation to the other. I run BaseOne.metadata.create_all(engine) then BaseTwo.metadata.create_all(engine) I get sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column...

BaseOne = declarative_base(metadata=MetaData(schema="a"))
BaseTwo = declarative_base(metadata=MetaData(schema="b"))

class Parent(BaseOne):
    __tablename__ = "parent"
    parent_id = Column(Integer, primary_key=True)
    other_col = Column(String(20))
    children = relationship("Child", backref="parent")

class Child(BaseTwo):
    __tablename__ = "child"
    child_id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey("a.parent.parent_id"), nullable=False)

# Where I'm creating them
BaseOne.metadata.create_all(engine)
BaseTwo.metadata.create_all(engine)

Should note I've also tried explicitly stating the schema via __table_args__. Also I have connected to my postgres instance and have verified that the parent table exists with the target column.

like image 208
Adam Avatar asked Feb 02 '26 10:02

Adam


1 Answers

It appears the issue was due to the fact I used multiple MetaData objects. It appears that they were unable to see each other. Simplified to a single declarative base and using __table_args__ to declare the schemas appeared to work. If someone knows how to declare multiple metadata objects and still be able to use .create_all feel free to post.

like image 116
Adam Avatar answered Feb 04 '26 23:02

Adam



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!