This is a duplicate from: http://stackoverflow.com/questions/43972912/abstract-table-concrete-inheritance-could-not-determine-join-condition-between I've got following example code:
models.py class CadastralObject(Base): __tablename__ = 'cadastral_object' def __init__(self, cadastral_region, cadastral_district, cadastral_block, cadastral_object): self.cadastral_region = cadastral_region self.cadastral_district = cadastral_district self.cadastral_block = cadastral_block self.cadastral_object = cadastral_object # this is a combined PK cadastral_region = Column(Integer, primary_key=True, index=True) cadastral_district = Column(Integer, primary_key=True, index=True) cadastral_block = Column(Integer, primary_key=True, index=True) cadastral_object = Column(Integer, primary_key=True, index=True) encumbrances = relationship("Encumbrance") class Encumbrance(Base): __tablename__ = 'encumbrance' id = Column(Integer, primary_key=True, index=True) def __init__(self, cadastral_object): self.parent_cadastral_region = cadastral_object.cadastral_region self.parent_cadastral_district = cadastral_object. cadastral_district self.parent_cadastral_block = cadastral_object.cadastral_block self.parent_cadastral_object = cadastral_object.cadastral_object # FK fields parent_cadastral_region = Column(Integer, nullable=False) parent_cadastral_district = Column(Integer, nullable=False) parent_cadastral_block = Column(Integer, nullable=False) parent_cadastral_object = Column(Integer, nullable=False) parent_object = relationship(CadastralObject) __table_args__ = (ForeignKeyConstraint( [ parent_cadastral_region, parent_cadastral_district, parent_cadastral_block, parent_cadastral_object], [ CadastralObject.cadastral_region, CadastralObject.cadastral_district, CadastralObject.cadastral_block, CadastralObject.cadastral_object]), {} ) this code works as intended: main.py c = CadastralObject(1, 2, 3, 4) session.add(c) e = Encumbrance(c) session.add(e) session.commit() print(c.encumbrances) print(e.parent_object) results: [<app.models.Encumbrance object at 0x000001C9B820BCC0>] <app.models.CadastralObject object at 0x000001C9B820BB00> however, when I'm trying convert my code to Concrete Inheritance: imodels.py class iCadastralObject(AbstractConcreteBase, Base): def __init__(self, cadastral_region, cadastral_district, cadastral_block, cadastral_object): self.cadastral_region = cadastral_region self.cadastral_district = cadastral_district self.cadastral_block = cadastral_block self.cadastral_object = cadastral_object # this is a combined PK cadastral_region = Column(Integer, primary_key=True, index=True) cadastral_district = Column(Integer, primary_key=True, index=True) cadastral_block = Column(Integer, primary_key=True, index=True) cadastral_object = Column(Integer, primary_key=True, index=True) @declared_attr def encumbrances(self): return relationship("iEncumbrance") class Building(iCadastralObject): __tablename__ = 'building' __mapper_args__ = { 'polymorphic_identity': 'building', 'concrete': True } @declared_attr def encumbrances(self): return relationship("iEncumbrance") class Flat(iCadastralObject): __tablename__ = 'flat' __mapper_args__ = { 'polymorphic_identity': 'flat', 'concrete': True } @declared_attr def encumbrances(self): return relationship("iEncumbrance") class Construction(iCadastralObject): __tablename__ = 'construction' __mapper_args__ = { 'polymorphic_identity': 'construction', 'concrete': True } class iEncumbrance(Base): __tablename__ = 'iencumbrance' id = Column(Integer, primary_key=True, index=True) def __init__(self, cadastral_object): self.parent_cadastral_region = cadastral_object.cadastral_region self.parent_cadastral_district = cadastral_object. cadastral_district self.parent_cadastral_block = cadastral_object.cadastral_block self.parent_cadastral_object = cadastral_object.cadastral_object # FK fields parent_cadastral_region = Column(Integer, nullable=False) parent_cadastral_district = Column(Integer, nullable=False) parent_cadastral_block = Column(Integer, nullable=False) parent_cadastral_object = Column(Integer, nullable=False) parent_object = relationship(iCadastralObject) __table_args__ = (ForeignKeyConstraint( [ parent_cadastral_region, parent_cadastral_district, parent_cadastral_block, parent_cadastral_object], [ iCadastralObject.cadastral_region, iCadastralObject.cadastral_district, iCadastralObject.cadastral_block, iCadastralObject.cadastral_object]), {} ) I'm getting an error on "from app.imodels import Building" sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship iCadastralObject.encumbrances - there are no foreign keys linking these tables. Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression. -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.