On Wed, Sep 23, 2009 at 12:27 AM, Michael Bayer <[email protected]>wrote:
>
>
> On Sep 22, 2009, at 11:59 AM, Kevin H wrote:
>
> >
> > I'm having some trouble developing my model, and was hoping someone on
> > this list could help...
> >
> > Here's what I want:
> > A BizEntity object
> > A Person and Company object (both descended from BizEntity, using
> > joined table inheritance)
> > A Company.employees attribute, which points to a list of Persons who
> > work for the company
> > A Person.company attribute, which points back to the company that
> > person works for
> >
> > Whenever I try to combine inheritance with this sort of pseudo-
> > adjacency-list, I get really odd things happening when I try to query
> > from the tables...like getting the wrong company back when I query by
> > id.
> >
> > Any ideas out there? Anyone done something like this?
>
> I'm doing this.
Howdy, Michael! Knowing that I'm not trying to do something impossible is
definitely a relief.
> The first thing to do is to definitely be on 0.5.6
> at the least.
>
OK, I'm on 0.5.5, so that's the first thing to fix, I guess.
> the next thing is to define the employees/company thing only once, as
> a relation/backref pair on just one of your mapped classes. doing it
> twice will mess things up for sure.
>
>
Good to know, thanks.
> your example also mentions a table called "nodes" which from
> everything else mentioned below would be erroneous. you don't need
> remote_side when mapping between Company and Person.
>
Wow, that's from something _really_ old. Been commented out for a while...I
didn't even notice that.
> None of this would cause the wrong "Company" to come back from a
> simple query by id, though. If that is really the effect you're
> seeing then something more fundamental might be amiss.
>
Looking at it again, it looks like this was caused by a problem in my
tests. I was assuming something I shouldn't have been about the order of
the data I was testing.
Thanks for the pointers, I'll post back later with results.
Kevin Horn
>
> >
> > MODEL (so far):
> > (NOTE: the commented out lines are left over from some of my previous
> > attempts to get things working.)
> >
> > class BizEntity(Base):
> > __tablename__ = 'biz_entities'
> > id = Column('bizentity_id', Integer, primary_key=True)
> > type = Column('bizentity_type', String(30), nullable=False)
> > __mapper_args__ = {'polymorphic_on': type}
> >
> > class Company(BizEntity):
> > __tablename__ = 'companies'
> > id = Column(Integer, ForeignKey('biz_entities.bizentity_id'),
> > primary_key=True)
> > name = Column('company_name', String(50))
> > #~ employees = relation("Person", backref=backref("company",
> > remote_side=[])
> > #~ backref('parent', remote_side=[nodes.c.id])
> >
> > __mapper_args__ = {'polymorphic_identity': 'company'}
> >
> > class Person(BizEntity):
> > __tablename__ = 'people'
> > id = Column('bizentity_id', Integer, ForeignKey
> > ('biz_entities.bizentity_id'), primary_key=True)
> > first_name = Column('first_name', String(50))
> > middle_init = Column('middle_init', String(1))
> > last_name = Column('last_name', String(50))
> >
> > #~ company = relation(Company, backref=backref('employees',
> > order_by=id))
> >
> > __mapper_args__ = {'polymorphic_identity':'person'}
> >
> >
> > >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---