> However in my case I don't want to be able to persist some random Employee. > All my employees should be engineers or managers. Ideally some exception > should be thrown if I try to add an Employee object to my session.
Maybe something like this. But I'm not sure if it's the right way. It fails on flush. from sqlalchemy.engine import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.schema import Column, MetaData, ForeignKey from sqlalchemy.types import Integer engine = create_engine('sqlite://') meta = MetaData(bind=engine) Session = sessionmaker(bind=engine) Base = declarative_base(metadata=meta) class EmployeeChecker(MapperExtension): def before_insert(self, mapper, connection, target): if type(target) != Employee: raise Exception('Inserting of Employee is not supported') class Employee(Base): __tablename__ = 'employee' id = Column(Integer, primary_key=True) name = Column(String) discriminator = Column('type', String(50)) __mapper_args__ = {'polymorphic_on': discriminator, 'extension' : EmployeeChecker()} class Manager(Employee): __tablename__ = 'manager' __mapper_args__ = {'polymorphic_identity' : 'manager'} id = Column(Integer, ForeignKey('employee.id'), primary_key=True) meta.drop_all() meta.create_all() session = Session() session.add(Employee()) session.add(Manager()) session.commit() e = session.query(Employee).one() e.name='test' session.add(e) session.commit() -- 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 sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.