On Thursday, October 22, 2015 at 2:57:32 PM UTC+1, Michael Bayer wrote: > > > > On 10/22/15 7:22 AM, [email protected] <javascript:> wrote: > > Hi, > > > > I've been trying to unravel some spaghetti code by using bindparams in > > relationships, which at first seemed like a neat solution to my > > problems. Unfortunately, it seems to have some behaviour that I find > > erratic or unpredictable. I'm sure it's perfectly explicable, but I'd > > like to be able to know why things happen this way and what precautions > > I could take to avoid problems. > > > > Long story short, we have some relationships that I'd like to eager > > load, but provide load parameters based on information I can gather > > during an http request. There's a callable the bindparam will check that > > will respond with the right information if a Flask request context is > > present. I would obviously expect the joined object not to be there > > outside a request context, but even when the information is provided > > from the callable, committing the parent object will make the joined > > object unavailable. > > the call to commit() expires all attributes on all objects. When you > access it, it lazyloads, and the bound parameter value is gone. > Turning on echo=True on the engine will illustrate all of these things > happening. > > > Thanks, that does explain a lot. Why isn't the callable used again when lazy loading the object? If I configure the relationship to be lazy to begin with, it does exactly what I expect, so why doesn't that happen after a refresh?
> > > > > > I've written a working simplified test case > > here: https://gist.github.com/ctolsen/a122e8ed95e4e305a433 > > One of these just use sqlalchemy, the other one demonstrates the > > behaviour with Flask (which is just about the same, but demonstrates the > > callable returning None or a value). > > > > What's happening here and why? Should I be doing something differently? > > Can I do something to make sure the joined object will always be > available? > > Thanks a bunch! > > > > Chris > > > > -- > > 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] <javascript:> > > <mailto:[email protected] <javascript:>>. > > To post to this group, send email to [email protected] > <javascript:> > > <mailto:[email protected] <javascript:>>. > > 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.
