On Sep 7, 2010, at 4:38 PM, Kent Bower wrote: > Don't want to strangle me, but when the orm (lazy)loads a MANYTONE object, it > doesn't go to the database if the object is in the session. Can I get > "with_parent()" to behave this way, or would I need to specifically build up > the primary key of the related object and call query.get()?
the latter. You can use get() for all many to ones if you aren't using any funny join conditions. > > > > On 9/7/2010 10:25 AM, Michael Bayer wrote: >> >> >> On Sep 7, 2010, at 10:12 AM, Kent Bower wrote: >> >>> Mike, in your proof of concept, when __getstate__ detected transient, why >>> did you need to make a copy of self.__dict__? "self.__dict__.copy()" >> >> i was modifying the __dict__ from what would be expected in a non-serialized >> object, so that was to leave the original object being serialized unchanged. >> >>> >>> >>> >>> On 9/6/2010 2:35 PM, Michael Bayer wrote: >>>> >>>> On Sep 6, 2010, at 2:11 PM, Kent Bower wrote: >>>> >>>>> Also, I was hoping you would tell me whether this would be a candidate >>>>> for subclassing InstrumentedAttribute? Would that make more sense or >>>>> providing custom __getstate__ & __setstate__ ? >>>> __getstate__ / __setstate__ are pretty much what I like to use for pickle >>>> stuff, unless some exotic situation makes me have to use __reduce__. One >>>> problem with the recipe is that theres no 'deferred' loading of >>>> attributes. So in that sense playing with InstrumentedAttribute would >>>> give you a chance to put a callable in there that does what you want. >>>> >>>> There is also the possibility that __setstate__ can load up callables into >>>> the instance_state using state.set_callable(). This is a callable that >>>> triggers when you access the attribute that is otherwise None. There's a >>>> little bit of fanfare required to get that callable to assign to the >>>> attribute in the right way. Attached is an example of that. This is >>>> all a little more shaky since the state/callable API isn't really public. >>>> Hasn't changed for awhile but there's no guarantee. >>>> >>>> >>>> >>>> >>>> >>>> >>>>> Thanks for your help, hopefully I'll be able to contribute such a recipe. >>>>> >>>>> Kent >>>>> >>>>> >>>>> >>>>>>> Since sqla won't load that for me in the case of transient, I need to >>>>>>> load the relation manually (unless you feel like enhancing that as >>>>>>> well). >>>>>> its not an enhancement - it was a broken behavior that was specifically >>>>>> removed. The transient object has no session, so therefore no SQL can >>>>>> be emitted - there's no context established. >>>>>> >>>>>> >>>>>> >>>>>>> Now I can manually emulate the obj being persistent with your changes >>>>>>> for >>>>>>> >>>>>>> On Sep 6, 2010, at 10:58 AM, Michael Bayer <mike...@zzzcomputing.com> >>>>>>> wrote: >>>>>>> >>>>>>>> On Sep 6, 2010, at 9:06 AM, Kent wrote: >>>>>>>> >>>>>>>>> with_parent seems to add a join condition. >>>>>>>> OK, so I guess you read the docs which is why you thought it joined >>>>>>>> and why you didn't realize it doesn't work for transient. >>>>>>>> r20b6ce05f194 changes all that so that with_parent() accepts transient >>>>>>>> objects and will do the "look at the attributes" thing. The docs are >>>>>>>> updated as this method does use the lazy loader SQL mechanism, not a >>>>>>>> join. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> Is there a way to get at >>>>>>>>> the query object that would be rendered from a lazy load (or what >>>>>>>>> "subqueryload" would render on the subsequent load), but on a >>>>>>>>> transient object, if i supply the session? >>>>>>>>> >>>>>>>>> even though not "recommended", can it make sqla believe my transient >>>>>>>>> object is detached by setting its state key? >>>>>>>>> >>>>>>>>> There are reasons i do not want to add this to the session and >>>>>>>>> disabling autoflush would also cause problems. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sep 3, 9:58 am, Michael Bayer <mike...@zzzcomputing.com> wrote: >>>>>>>>>> On Sep 3, 2010, at 9:36 AM, Kent wrote: >>>>>>>>>> >>>>>>>>>>> For the case of customerid = '7', that is a simple problem, but when >>>>>>>>>>> it is a more complex join condition, we only wanted to define this >>>>>>>>>>> condition in one single place in our application (namely, the orm). >>>>>>>>>>> That way, if or when that changes, developers don't need to search >>>>>>>>>>> for >>>>>>>>>>> other places in the app that needed to manually duplicate the logic >>>>>>>>>>> of >>>>>>>>>>> the orm join condition. >>>>>>>>>>> If I supplied the DBSession to sqla, it would know how to create the >>>>>>>>>>> proper Query object for this lazyload. Can you point me in the >>>>>>>>>>> right >>>>>>>>>>> direction (even if where you point me is not currently part of the >>>>>>>>>>> public API)? >>>>>>>>>> Query has the with_parent() method for this use case. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> Thanks again, >>>>>>>>>>> Kent >>>>>>>>>>> -- >>>>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>>>> Groups "sqlalchemy" group. >>>>>>>>>>> To post to this group, send email to sqlalch...@googlegroups.com. >>>>>>>>>>> To unsubscribe from this group, send email to >>>>>>>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>>>>>>> For more options, visit this group >>>>>>>>>>> athttp://groups.google.com/group/sqlalchemy?hl=en. >>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "sqlalchemy" group. >>>>>>>>> To post to this group, send email to sqlalch...@googlegroups.com. >>>>>>>>> To unsubscribe from this group, send email to >>>>>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>>>>> For more options, visit this group at >>>>>>>>> http://groups.google.com/group/sqlalchemy?hl=en. >>>>>>>>> >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "sqlalchemy" group. >>>>>>>> To post to this group, send email to sqlalch...@googlegroups.com. >>>>>>>> To unsubscribe from this group, send email to >>>>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>>>> For more options, visit this group at >>>>>>>> http://groups.google.com/group/sqlalchemy?hl=en. >>>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "sqlalchemy" group. >>>>>>> To post to this group, send email to sqlalch...@googlegroups.com. >>>>>>> To unsubscribe from this group, send email to >>>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>>> For more options, visit this group at >>>>>>> http://groups.google.com/group/sqlalchemy?hl=en. >>>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "sqlalchemy" group. >>>>>> To post to this group, send email to sqlalch...@googlegroups.com. >>>>>> To unsubscribe from this group, send email to >>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>> For more options, visit this group at >>>>>> http://groups.google.com/group/sqlalchemy?hl=en. >>>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google Groups >>>>> "sqlalchemy" group. >>>>> To post to this group, send email to sqlalch...@googlegroups.com. >>>>> To unsubscribe from this group, send email to >>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/sqlalchemy?hl=en. >>>>> >>> >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "sqlalchemy" group. >>> To post to this group, send email to sqlalch...@googlegroups.com. >>> To unsubscribe from this group, send email to >>> sqlalchemy+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/sqlalchemy?hl=en. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To post to this group, send email to sqlalch...@googlegroups.com. >> To unsubscribe from this group, send email to >> sqlalchemy+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/sqlalchemy?hl=en. > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.