Andrew Millspaugh <[email protected]> wrote:
> Yes, I got the style from there.
>
> I have a great great great great grandchild that I need to be able to access
> by the great great great great grandparent id. How would you recommend doing
> that, then? I don't want to have to write f_instances =
> F.query.join(F.e).join(E.d).join(D.c).join(C.b).join(B.a).filter(A.id ==
> 1).all() just to find the F's that have A.id 1.
If that’s all you need, why not put an accessor on F?
class F(Base):
# …
@classmethod
def join_to_a(cls):
return (F.e, E.d, D.c, C.b, B.a)
then:
F.query.join(*F.join_to_a())
>
> On Tuesday, March 24, 2015 at 6:28:31 AM UTC-7, Michael Bayer wrote:
>
>
> Andrew Millspaugh <[email protected]> wrote:
>
> > I've got a class hierarchy that looks something like this:
> >
> > [ A ] 1--------* [ B ] 1---------* [ C ] 1----------* [ D ] 1--------0..1 [
> > E ] 1..*----------0..1 [ F ]
> >
> > org proj ticket snap
> > bidlimit ticketset
> >
> > And I'm trying to add a relationship from A to F with a backref. The
> > relationship definition (on the A model) looks like:
> >
> > f = DB.relationship('F',
> > secondary=(
> > 'join(F, E, F.id == E.f_id)'
> > '.join(D, E.d_id == D.id)'
> > '.join(C, D.c_id == C.id)'
> > '.join(B, C.b_id == B.id)'
> > ),
> > primaryjoin='A.id == B.a_id',
> > secondaryjoin='E.f_id == F.id',
> > backref=DB.backref('a', uselist=False), viewonly=True
> > )
> >
> > Now, if I query A.f, I get all of the F's, instead of just the ones which
> > have a relationship with A. I'm sure I'm missing something simple, but I
> > can't seem to find it... Any help out there?
>
> what does your SQL output say? Is this query(A).join(A.f) or the “f”
> attribute on an existing “A”? I’m assuming you got this style from
> http://docs.sqlalchemy.org/en/rel_0_9/orm/join_conditions.html#composite-secondary-joins,
>
> note that its experimental and not well supported. In most cases you should
> deal with individual relationships between each class.
>
> > --
> > 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 [email protected].
> > To post to this group, send email to [email protected].
> > Visit this group at http://groups.google.com/group/sqlalchemy.
> > For more options, visit https://groups.google.com/d/optout.
>
> --
> 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 [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.