very simple and was fixed in r4720.
On May 10, 2008, at 12:48 PM, Michael Bayer wrote: > > seems like a bug whereby when it sees the "Manager" single table > inheritor, it somehow doesn't get the message to synchronize the > "Employee" primary key column with the Person primary key column. > I'll have a look at it later today. > > > On May 9, 2008, at 7:49 PM, Fernando Zunino wrote: > >> >> Hi, >> is it possible to combine joined and single table inheritance in the >> same inheritance hierarchy? >> >> In the code at the bottom I want to use the persons table as a base >> for the Person, Employee and Manager classes and the employees table >> to store the particular fields of Employee and Manager. >> >> I've run this code using PostgreSql and it correctly flushes the >> Person and Employee instances but when it wants to flush the Manager >> instance gives the following error: >> >> /home/fernando/.pythonrepo/SQLAlchemy-0.4.5-py2.5.egg/sqlalchemy/ >> engine/base.py in _handle_dbapi_exception(self, e, statement, >> parameters, cursor) >> 940 if self.__close_with_result: >> 941 self.close() >> --> 942 raise exceptions.DBAPIError.instance(statement, >> parameters, e, connection_invalidated=is_disconnect) >> 943 finally: >> 944 del self._reentrant_error >> >> <class 'sqlalchemy.exceptions.ProgrammingError'>: (ProgrammingError) >> relation "employees_person_id_seq" does not exist >> 'select nextval(\'"employees_person_id_seq"\')' None >> >> Anyone have any suggestions? >> >> thanks, >> Fernando >> >> >> class 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() >> >> >> >>> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---