Thanks Michael, That worked great. I guess I missed that inheriting mappers don't need a table/selectable/join to map to.
By the way, congrats on a great project. Your attention and effort are clear in every aspect (including the unheard-of speed of support)! On Sep 6, 3:04 pm, Michael Bayer <[EMAIL PROTECTED]> wrote: > Maps to explicit joins are in any case going to integrate poorly with > the joins created by SQLA's inheritance functionality. But in this > case, no imitation of SQLA's join is needed: > > orm.mapper(Lab, inherits=Group, > polymorphic_identity=u"group_lab", > ) > > On Sep 6, 2008, at 1:24 PM, Jason Yamada-Hanff wrote: > > > mport sqlalchemy as sa > > from sqlalchemy import types as t > > from sqlalchemy import orm > > > engine = sa.create_engine('sqlite:///:memory:', echo=True) > > metadata = sa.MetaData() > > > agents = sa.Table('agents', metadata, > > sa.Column('id', t.Integer, > > sa.Sequence('agents_id_seq', optional=True), > > primary_key=True), > > sa.Column('type', t.Unicode(50), > > sa.CheckConstraint("type IN ('agent', 'person', 'group', > > 'group_org', \ > > 'group_lab', 'group_contactlist')"), nullable=False), > > sa.Column('notes', t.UnicodeText), > > ) > > > groups = sa.Table('groups', metadata, > > sa.Column('id', t.Integer, unique=True), > > sa.Column('short_name', t.Unicode(50)), > > sa.Column('name', t.Unicode(255), nullable=False), > > sa.Column('group_status', t.Unicode(50), > > sa.CheckConstraint("group_status IN ('active', 'not active', > > 'closed')"), > > default=u'active', nullable=False), > > sa.Column('description', t.UnicodeText), > > sa.PrimaryKeyConstraint('id'), > > sa.ForeignKeyConstraint(['id'], ['agents.id'], > > onupdate="CASCADE", ondelete="CASCADE") > > ) > > > class Agent(object): > > pass > > > class Group(Agent): > > pass > > > class Lab(Group): > > pass > > > def map_agent_classes(): > > orm.mapper(Agent, agents, > > polymorphic_on=agents.c.type, > > polymorphic_identity=u"agent", > > ) > > > orm.mapper(Group, groups, > > inherits=Agent, > > polymorphic_identity=u"group", > > ) > > > lab_select = > > agents.outerjoin(groups).select(agents.c.type==u'group_lab',\ > > use_labels=True).alias('labs') > > orm.mapper(Lab, lab_select, > > inherits=Group, > > polymorphic_identity=u"group_lab", > > ) > > > map_agent_classes() > > > metadata.create_all(engine) > > Session = orm.sessionmaker(bind=engine) > > > sess = Session() > > > lab = Lab() > > lab.name = u"Lab Name" > > lab.short_name = u"lab" > > > sess.add(lab) > > sess.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 -~----------~----~----~----~------~----~------~--~---