Skip to content Skip to sidebar Skip to footer

Sqlalchemy Can't Join Two Tables With Two Foreign Keys Between Them

The code below does not work due to this line owner_id = Column(Integer, ForeignKey('employees.employee_id')) in Manager class. SQLAlchemy generates error message: AmbiguousForei

Solution 1:

SQLAlchemy is confused about how to join Manager to Employee because you have multiple foreign keys between the two tables, employee_id and owner_id. In this case, you need to specify the inherit_condition to the mapper explicitly:

classManager(Employee):
    __tablename__ = 'managers'

    employee_id = Column(Integer, ForeignKey('employees.employee_id'),
                         primary_key=True)
    manager_data = Column(String(50))

    owner_id = Column(Integer, ForeignKey('employees.employee_id'))

    __mapper_args__ = {'polymorphic_identity': 'manager', 'inherit_condition': employee_id == Employee.employee_id}

Solution 2:

You are both extending parent model as well as defining relationship to the same parent model.

simply use one way, you could simply created relations and have all your models extend base class

classEmployee(Base):
    __tablename__ = 'employees'

    employee_id = Column(Integer, primary_key=True)
    ...
classOwner(Base):
    __tablename__ = 'owners'
    __mapper_args__ = {'polymorphic_identity': 'owner'}
    owner_id = Column(Integer, primary_key=True)
    ...
    ...
classManager(Base):
    __tablename__ = 'managers'
    __mapper_args__ = {'polymorphic_identity': 'manager'}

    manager_id = Column(Integer, primary_key=True)
    employee_id = Column(Integer, ForeignKey('employees.employee_id'), primary_key=True)
    owner_id = Column(Integer, ForeignKey('owners.owner_id'))
    ...
    ...

add the rest of relevant field where indicated as ....

Post a Comment for "Sqlalchemy Can't Join Two Tables With Two Foreign Keys Between Them"