Andrew Millspaugh <[email protected]> wrote:

> Because I also want to be able to go the other way. I want to be able to get 
> the a attribute from any given F. 

well, then you’d put one on F also.

if you want to send working code and SQL we can see what’s wrong with the
relationship b.c. the one in the docs works (I think).



> 



> On Tuesday, March 24, 2015 at 4:47:42 PM UTC-7, Michael Bayer wrote:
> 
> 
> 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.

-- 
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.

Reply via email to