I didn't intend to use the word reflected in the Programming sense, I meant in the traditional sense: is represented by.
That sentence was confusing, sorry! I was saying class B, C, and D are all defined using that same pattern. They each have their own class. Amir On Tuesday, June 4, 2013, Michael Bayer wrote: > > On Jun 4, 2013, at 1:55 AM, Amir Elaguizy <aelag...@gmail.com<javascript:;>> > wrote: > > > Hi there, > > > > I have a tree that looks like this, reflected via polymorphic > inheritance: > > what do we mean "reflected" here, are you reflecting tables from the > database, that is, > http://docs.sqlalchemy.org/en/rel_0_8/core/schema.html#metadata-reflection? > > > > > That works great, like: > > > > > > class BaseModel(db.Model): # Table A in diagram > > __tablename__ = "entities" > > > > id = db.Column(db.BigInteger, primary_key=True, nullable=False, > server_default=func.nextval('guid_seq')) > > type_id = db.Column(db.SmallInteger, > db.ForeignKey(EntityTypesModel.id)) > > > > __mapper_args__ = { > > 'polymorphic_identity':'entity', > > 'polymorphic_on':type_id, > > 'with_polymorphic':'*' > > } > > this is why I question the word "reflected" because I don't see you using > reflection there. > > > > > class BrandModel(BaseModel): # Table B, C, D in diagram > > __tablename__ = 'brands' > > > > id = db.Column(db.BigInteger, db.ForeignKey(StufffModel.id), > primary_key=True, nullable=False) > > name = db.Column(db.String, nullable=False) > > > > __mapper_args__ = { > > 'polymorphic_identity':ET_BRAND, > > } > > Im confused by this as well - are you saying that you map the same class > to B, C, and D rows? That would be unusual. It wouldn't work at all on > the persistence side as SQLAlchemy could not know which of B, C, or D you > wish for a particular BrandModel to be persisted towards. > > > > > > > > The problem is I need to reflect something more like this: > > > > A > > / | \ > > B C D > > / \ > > E F > > > > Where D is not only a polymorphic child of A but also the polymorphic > parents of E & F. > > > > It seems like I have to choose, D can either be a polymorphic child or > it can be a parent - it can't be both. > > > > Do I have any options here? > > SQLAlchemy can represent inheritance hierarchies of any depth. However, > because you are assigning a single subclass to all of B, C, and D that > might be why there's an issue here, you'd need to assign a distinct > subclass of BaseModel to at least "D", and then another subclass of D_Model > to handle E and F. > > Preferably, you'd produce distinct classes for all six tables. > > > > -- > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/pI62wMDb6M4/unsubscribe?hl=en > . > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com <javascript:;>. > To post to this group, send email to sqlalchemy@googlegroups.com<javascript:;> > . > Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- 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 http://groups.google.com/group/sqlalchemy?hl=en. For more options, visit https://groups.google.com/groups/opt_out.