single inherit from a joined table inherit

Issue #1036 resolved
Mike Bayer repo owner created an issue

this example should work but doesnt sync from Person to Employee:

lass Person(object):
   def __init__(self, name):
       self.name = name
   def __repr__(self):
       return self.__class__.__name__ + " " + self.name

class Employee(Person):
   def __init__(self, name, employee_data):
       self.name = name
       self.employee_data = employee_data

   def __repr__(self):
       return self.__class__.__name__ + " " + self.name + " " +
self.employee_data

class Manager(Employee):
   def __init__(self, name, employee_data, manager_data):
       self.name = name
       self.employee_data = employee_data
       self.manager_data = manager_data

   def __repr__(self):
       return self.__class__.__name__ + " " + self.name + " " +
self.manager_data

persons_table = Table('persons', metadata,
   Column('person_id', Integer, primary_key=True),
   Column('name', String(50)),
   Column('type', String(20), nullable=False)
)

employees_table = Table('employees', metadata,
   Column('person_id', Integer, ForeignKey('persons.person_id'),
primary_key=True),
   Column('employee_data', String(50)),
   Column('manager_data', String(50)),
)

person_mapper = mapper(Person, persons_table, \
   polymorphic_on=persons_table.c.type,
polymorphic_identity='person')
employee_mapper = mapper(Employee, employees_table, inherits=Person,
polymorphic_identity='engineer')
manager_mapper = mapper(Manager, inherits=employee_mapper,
polymorphic_identity='manager')

metadata.create_all(engine);
Session = scoped_session(sessionmaker(bind=engine, autoflush=True,
transactional=True))
session = Session();

session.save(Person('fer'))
session.save(Employee('e', 'e1'))
session.save(Manager('m', 'e2', 'm1'))
session.flush()

Comments (2)

  1. Log in to comment