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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---