Hello,

I'm working with a class inheritance structure which can be illustrated by 
this example:
class Entity(object):

  def __init__(self,
    entity_type=EntityTypeEntity,
    id=None):

      self.entity_type = entity_type  
      self.id = id

class Person(Entity):

  def __init__(self,
    entity_class=None,
    entity_type=EntityTypePerson,
    id=None,
    name_first=None,
    name_last=None,
    name_middle=None,
    name_prefix=None,
    name_suffix=None):

      super(Person, self).__init__(entity_type,
                                   id)

      self.entity_class = entity_class
      self.name_first = name_first
      self.name_last = name_last
      self.name_middle = name_middle
      self.name_prefix = name_prefix
      self.name_suffix = name_suffix

class SupporterPerson(Person):
  
  def __init__(self,
    entity_class=EntityClassSupporterPerson,
    entity_type=EntityTypePerson,
    id=None,
    name_first=None,
    name_last=None,
    name_middle=None,
    name_prefix=None,
    name_suffix=None,
    relationship=None):

      super(SupporterPerson, self).__init__(entity_class,
                                            entity_type,
                                            id,
                                            name_first,
                                            name_last,
                                            name_middle,
                                            name_prefix,
                                            name_suffix)

      self.relationship = relationship

My current mappings look like this:
# Mappers
self.entity_table_mapper = mapper(
  Entity,
  self.entities_table,
  polymorphic_on=self.entities_table.c.entity_type,
  polymorphic_identity=EntityTypeEntity,
  with_polymorphic='*',
  properties={
    'entity_type': self.entities_table.c.entity_type,
    'id': self.entities_table.c.id,
  }
)

self.persons_table_mapper = mapper(
  Person,
  self.persons_table,
  polymorphic_on=self.persons_table.c.entity_class,
  polymorphic_identity=EntityTypePerson,
  with_polymorphic='*',
  inherits=Entity,
)

self.supporter_persons_table_mapper = mapper(
  SupporterPerson,
  self.supporter_persons_table,
  polymorphic_identity=EntityClassSupporterPerson,
  with_polymorphic='*',
  inherits=Person,
)

I am able to instantiate a SupporterPerson() and successfully store all 
attributes correctly in their respective tables. So the mapping seems to 
work well. However...

In the broader context of my application, a query to load Causes() ( 
sketched out below ) will eagerload a list of that causes supporters.  When 
supporters are eagerloaded, the supporter is reliably loaded to the level 
of Person() however the attributes specific to SupporterPerson() are not 
loaded.  In other words, the attributes specific to the youngest child in 
my class inheritance, structure are NOT loaded by the eagerload.

class Cause(object):

  def __init__(self,
    id=None
    supporters=None):

      self.id = id
      self.supporters = [] if supporters is None else None

So my question is, Is there a problem with my mapping? Or is this depth of 
inheritance not supported by the eagerload? Or perhaps there is something 
else I'm missing altogether ( unrelated to the eagerload ) ? Any advice or 
assistance would be greatly appreciated. Sorry if I'm missing something 
that is already clearly stated in the documentation.

Best,

Ken

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to