AbstractA is AbstractB "base" class.........
AbstractB is ClassA "base" class............

Everything work fine in this case.

I just want to set 'polymorphic_identity' on each inheritance level
if I set by hand : update abstract_a set class_name = 'class_a' :
AbstractA.query.first() give me back a ClassA object


2010/8/15 Michael Bayer <mike...@zzzcomputing.com>

>
> On Aug 15, 2010, at 6:52 AM, jean-philippe serafin wrote:
>
> > Hi,
> >
> > I've got a class mapping with two polymorphic inheritance :
> >
> > class AbstractA(Base):
> >
> >    __tablename__ = "abstract_a"
> >
> >    id = Column(Integer, primary_key=True)
> >    class_name = Column('class_name', String(50))
> >
> >    __mapper_args__ = {
> >        'polymorphic_on': class_name,
> >    }
> >    #some stuff here
> >
> > class AbstractB(AbstractA):
> >
> >    __tablename__ = "abstract_b"
> >
> >    id = Column(Integer, ForeignKey('abstract_a.id'),
> > primary_key=True)
> >    class_name = Column('class_name', String(50))
> >
> >    __mapper_args__ = {
> >        'polymorphic_on': class_name,
> >        'polymorphic_identity': __tablename__,
> >    }
> >    #some stuff here
> >
> > class ClassA(AbstractB):
> >
> >    __tablename__ = "table_a"
> >    __mapper_args__ = {
> >        'polymorphic_identity': __tablename__,
> >    }
> >
> >    id = Column(Integer, ForeignKey('abstract_b.id'),
> > primary_key=True)
> >    label = Column('label', String(50))
> >
> >    def __init__(self, label):
> >        self.label = label
> >
> > I persist a ClassA object :
> >
> > object = ClassA('toto')
> > db_session.add(object)
> > db_session.commit()
> >
> > When I try to reload the object like this :
> >
> > reloaded_object = AbstractB.query.first()
> >
> > I get back a ClassA object (just fine)
> >
> > but when I try to reload like this :
> >
> > reloaded_object = AbstractA.query.first()
> >
> > I get back a AbstractA object because abstract_a.class_name has not
> > been set to polymorphic_identity.
> >
> > Is this an issue or expected work?
>
> polymorphic_on only goes on the base class.    SQLA should be changed to
> raise an error on the setup you have above.
>
>
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> > To post to this group, send email to sqlalch...@googlegroups.com.
> > To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@googlegroups.com>
> .
> > For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@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.

Reply via email to