On Sep 15, 11:03 pm, Jarrod Chesney <jarrod.ches...@gmail.com> wrote: > Hi All > I've been reading the documentation for ages and i can't figure out > why when i print the results a query from my inherited table, It just > prints them as the base type. > > I was hoping someone here would be nice enough to help me solve this > problem. > > I thought the last print statement would print an instance of the > _UtConfReconcilerActionSnapshot class but it doesn't > > I've got one record in both tables and 'id' = 1 in each table. > What am i doing wrong?
You are missing "polymorphic_on" in _UtConfReconcilerActions.__mapper_args__. Without this, SQLAlchemy cannot do polymorphic loads. Try this as your __mapper_args__: {'polymorphic_on': 'object_type', 'with_polymorphic': '*'} Hope it helps, -Conor > <<<<<<<<<<< Begin code >>>>>>>>>>>>> > > from sqlalchemy import Table, Column, Integer, String, MetaData, > ForeignKey, CheckConstraint > from sqlalchemy.orm import relation > from sqlalchemy.ext.declarative import declarative_base > from sqlalchemy import create_engine > from sqlalchemy.orm import sessionmaker > > __DATABASE_NAME__='UtConfSom.sqlite' > > Base = declarative_base() > > # ============================== Reconciler Actions > =========================== > > class _UtConfReconcilerActions(Base): > > __tablename__ = 'tblReconcilerActions' > __mapper_args__ = {'with_polymorphic': '*'} > > # 1 to Many relationship to the managed > id = Column(Integer, primary_key=True) > action = Column(String, CheckConstraint("action in ('SNAPSHOT', > 'COMPARE', 'UPGRADE')")) > object_type = Column(String, CheckConstraint("object_type in ('ALL', > 'SCHEMA', 'TABLE', 'COLUMN', 'INDEX')")) > > def __repr__(self): > return ("'%s'" % _UtConfReconcilerActions.__name__ > + "\n id='%i'" % self.id > + "\n managed_id='%i'" % self.managed_id > + "\n action='%s'" % self.action > + "\n object_type='%s'" % self.object_type > ) > > class _UtConfReconcilerActionSnapshot(_UtConfReconcilerActions): > > __tablename__ = 'tblReconcilerActionSnapshot' > # __mapper_args__ = {'with_polymorphic': '*'} > __mapper_args__ = {'polymorphic_identity': 'snapshot', > 'with_polymorphic': '*'} > > # Joined table inheritence > id = Column(Integer, ForeignKey('tblReconcilerActions.id'), > primary_key=True) > > revision = Column(String) > comment = Column(String) > > def __repr__(self): > return (_UtConfReconcilerActions.__repr__(self) > + "\n '%s'" % > _UtConfReconcilerActionSnapshot.__name__ > + "\n id='%s'" % self.revision > + "\n revision='%s'" % self.revision > ) > > __db_exists = os.path.exists(__DATABASE_NAME__) > > engine = create_engine('sqlite:///' + __DATABASE_NAME__) > > # New database, create the tables > if not __db_exists: > Base.metadata.create_all(engine) > print >> sys.stderr, ("WARINING - Creating empty '%s' database" % > __DATABASE_NAME__ ) > > Session = sessionmaker(bind=engine) > session = Session() > > print session.query(_UtConfReconcilerActions).with_polymorphic > ('*').first() > > <<<<<<<<<<<<<< end code >>>>>>>>>>>>>>>>>> --~--~---------~--~----~------------~-------~--~----~ 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 sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---