I'm trying to use assign_mapper with polymorphic multiple table inheritance, and running into problems with the primary key sequencing. Is this a supported use of sqlalchemy? I'm running version 0.3.1.
Sample code below. If use_assign_mapper is false, then the script works with both postgres & sqlite. If it's true, then sqlite fails on the assertion that the manager & employee id's be different, and postgres throws an exception that 'managers_person_id_seq" does not exist' Thanks in advance for any help, and thanks for an otherwise awesome product! -Ken #!/usr/bin/env python # The setup here is identical to the example at: # http://sqlalchemy.org/docs/adv_datamapping.myt#advdatamapping_inheritance_multiple # Except that it conditionally uses assignmapper instead of the default mapper from sqlalchemy import * from sqlalchemy.ext.assignmapper import assign_mapper from sqlalchemy.ext.sessioncontext import SessionContext use_postgres = False use_assign_mapper = True if not use_postgres: url = 'sqlite:///:memory:' else: url="postgres://ken:[EMAIL PROTECTED]/tutorial" engine = create_engine(url) metadata = BoundMetaData(engine) context = SessionContext(create_session) employees = Table('employees', metadata, Column('person_id', Integer, primary_key=True), Column('name', String(50)), Column('type', String(30))) engineers = Table('engineers', metadata, Column('person_id', Integer, ForeignKey('employees.person_id'), primary_key=True), Column('engineer_info', String(50)), ) managers = Table('managers', metadata, Column('person_id', Integer, ForeignKey('employees.person_id'), primary_key=True), Column('manager_data', String(50)), ) class Employee(object): pass class Engineer(Employee): pass class Manager(Employee): pass person_join = polymorphic_union( { 'engineer':employees.join(engineers), 'manager':employees.join(managers), 'person':employees.select(employees.c.type=='person'), }, None, 'pjoin') metadata.create_all() ####################################### if not use_assign_mapper: #This works: person_mapper = mapper(Employee, employees, select_table=person_join, polymorphic_on=person_join.c.type, polymorphic_identity='person') mapper(Engineer, engineers, inherits=person_mapper, polymorphic_identity='engineer') mapper(Manager, managers, inherits=person_mapper, polymorphic_identity='manager') else: #This doesn't person_mapper = assign_mapper(context, Employee, employees, select_table=person_join, polymorphic_on=person_join.c.type, polymorphic_identity='person') assign_mapper(context, Engineer, engineers, inherits=person_mapper, polymorphic_identity='engineer') assign_mapper(context, Manager, managers, inherits=person_mapper, polymorphic_identity='manager') context.current.echo_uow=True eng = Engineer() mgr = Manager() context.current.save(eng) context.current.save(mgr) context.current.flush() print "eng: %d mgr: %d" % (eng.person_id, mgr.person_id) assert(eng.person_id != mgr.person_id) --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---