Awesome idea, thanks for the reply! I ended up combining this approach with 
the callable_ argument and don't have to explicitly pass the argument now 
at all.

This is a great approach and it is fairly simple as well. Thank you a lot.

On Friday, 5 August 2016 00:24:30 UTC+10, Mike Bayer wrote:
>
>
>
> On 08/04/2016 10:14 AM, Florian Rüchel wrote: 
> > I have a relationship that depends on a query time variable to determine 
> > the correct join. The use case is request-time localization in a web 
> > application. When running the query during a request, I want to 
> > determine the locale and only load the translation for the current 
> > language for a given object. However, the primaryjoin condition callable 
> > is evaluated at mapping time instead which only happens once instead of 
> > on every request. 
> > 
> > Here is a quick sample: 
> > 
> > def get_myobj_primaryjoin(): 
> >     return and_(MyObj.id == MyObjI18N.obj_id, request.locale == 
> > MyObjI18N.lang) 
> > 
> > 
> > class MyObj(Base): 
> >     id = Column(Integer, primary_key=True) 
> >     _current_translation = relationship(MyObjI18N, uselist=False, 
> > primaryjoin=get_myobj_primaryjoin, lazy='joined') 
> > 
> > 
> > class MyObjI18N(Base): 
> >     obj_id = Column(ForeignKey(MyObj.id), primary_key=True) 
> >     lang = Column(String) 
> > 
> > This should give a rough idea of the issue: request.locale changes at 
> > query time, that is, if I do MyObj.query in two different requests, it 
> > won't work, it will always take the first time it was called. 
> > 
> > Note that I was previously using a with_transformation approach when 
> > building the query but I wanted to remove the necessity to add that 
> > every time a build a query and would have it much rather built 
> implicitly. 
> > 
> > Any ideas are highly appreciated, no argument I can pass to 
> > "relationship" seems to help my use case. 
>
>
> we use a bound parameter for this and a recipe for getting a value in 
> there can be seen at 
> https://bitbucket.org/zzzeek/sqlalchemy/wiki/UsageRecipes/GlobalFilter . 
>     In particular the lazyload case can only be affected using a custom 
> MapperOption as described near the bottom of that recipe. 
>
>
>
> > 
> > -- 
> > 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+...@googlegroups.com <javascript:> 
> > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:> 
> > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> > Visit this group at https://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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to