Sorry I missed that.  The definition for Engineer also matches Chemical 
Engineers.  I assumed the error was in my inheritance code, but of 
course it turned out to be something much simpler.

Otherwise, is the approach correct?  Should the Chemical Engineer mapper 
inherit from the Engineer mapper or from the Employee mapper?  Is using 
the concrete approach with select objects optimal?  Is there a better 
way to approach this?

I'm still trying to get a grip on SA inheritance.  The examples are 
pretty clear, but as I think of other cases, it's not yet always clear 
how they should be done, which means I don't understand SA inheritance 
well enough yet.

Thanks.

Randall

Michael Bayer wrote:
> if you change your "echo" to 'debug', or just select straight from your
> p_union selectable, youll see these rows:
> 
> (5, u'cengineer1', u'cengineer1', u'cengineer1', None,
> u'chemical_engineer')
> (6, u'cengineer2', u'cengineer2', u'cengineer2', None,
> u'chemical_engineer')
> (1, u'manager1', None, None, u'manager1', u'manager')
> (2, u'manager2', None, None, u'manager2', u'manager')
> (3, u'engineer1', u'engineer1', None, None, u'engineer')
> (4, u'engineer2', u'engineer2', None, None, u'engineer')
> (5, u'cengineer1', u'cengineer1', u'cengineer1', None, u'engineer')
> (6, u'cengineer2', u'cengineer2', u'cengineer2', None, u'engineer')
> 
> Where you can see that the chemical engineers are coming out twice with
> inconsistent types.  the query has to be tuned to be more specific:
> 
> managers = select([employees, column("'manager'").label('type')],
> employees.c.manager_data !=
>                                None).alias('managers')
> engineers = select([employees, column("'engineer'").label('type')],
> and_(employees.c.engineer_info !=
>                                 None,
> employees.c.cheme_info==None)).alias('engineers')
> chemical_engineers = select([employees,
> column("'chemical_engineer'").label('type')],
>                              and_(employees.c.engineer_info != None,
>                                   employees.c.cheme_info !=
> None)).alias(
>                                   'chemical_engineers')
> 
> 
> p_union = polymorphic_union(
>     {
>     'engineer': engineers,
>     'manager': managers,
>     'chemical_engineer': chemical_engineers
>     },
>     None, 
> )
> 
> 
> > 
> 


--~--~---------~--~----~------------~-------~--~----~
 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to