Ok, I wonder the reasons, but I trust your answer completely, so I won't disable it. Thanks for your help again.
On Mar 4, 4:26 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote: > Kent wrote: > > Thanks... that is very helpful. I could keep references to these. If > > I choose the apparently lazier route and set weak_identity_map=False, > > then does any other action besides explicitly expunging free this > > memory, such as when the session goes out of scope, I assume? > > Or do I need to carefully expunge them? > > don't disable the weak identity map. just maintain your own collection > of all the objects you care about. > > > > > On Mar 4, 4:09 pm, Conor <conor.edward.da...@gmail.com> wrote: > >> Conor wrote: > >> > Kent wrote: > > >> >> I agree I shouldn't care, so maybe there is another way to attack my > >> >> problem. The reason I care is because I've extended the python > >> object > >> >> with some auxiliary information that I need. After the refresh() in > >> >> this case, I still need access to that data that is tied to the > >> >> object, but not present in the database (it is transient data). If > >> >> sqla creates a new instance, I loose that data. > > >> >> Is there a better mechanism for doing that? > > >> > You need to either manually keep strong references to each object that > >> > has the auxiliary information or disable the weak identity map. See > >> >http://www.sqlalchemy.org/docs/05/session.html#frequently-asked-quest... > >> > or > >> >http://www.sqlalchemy.org/docs/05/session.html#frequently-asked-quest... > >> > for more information. > > >> That second link should > >> behttp://www.sqlalchemy.org/docs/05/session.html#session-attributes. > >> Oops. > > >> >> On Mar 4, 3:38 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote: > > >> >>> refresh doesn't remove any objects from the session so its a matter > >> of > >> >>> what is present in the session, not marked as dirty, and strongly > >> >>> referenced on the outside. if you're using refresh you shouldn't > >> care > >> >>> about how it gets data back into the collection. > > >> >>> Kent wrote: > > >> >>>> What's strange is that I can't recreate the problem on more simple > >> >>>> stage. Every time I refresh() on the parent object, the list > >> objects > >> >>>> remain the same. In other words, *sometimes* it behaves as I hope > >> it > >> >>>> to (by apparently refreshing the list's objects) and *sometimes* if > >> >>>> throws them out and creates new ones. The mystery to me is what > >> >>>> determines when it will create new instances vs. refreshing the > >> >>>> existing ones? > > >> >>>> On Mar 4, 3:24 pm, "Michael Bayer" <mike...@zzzcomputing.com> > >> wrote: > > >> >>>>> Kent wrote: > > >> >>>>>> If I use session.refresh(obj) to re-load an obj that has a > >> one-to-many > >> >>>>>> relational property, the objects in the list are *replaced* > >> instead of > >> >>>>>> *refreshed* if they already exist. > > >> >>>>>> Suppose department has a list of employees: > > >> >>>>>> suppose dept.employees = [ emp1, emp2 ] > > >> >>>>>> session.refresh(dept) > > >> >>>>>> the dept."employees" list's elements are replaced with new > >> objects > >> >>>>>> instead of reusing those that existed and refreshing them. > > >> >>>>>> Is it possible to have those same objects re-used and simply > >> refreshed > >> >>>>>> instead of replaced? > > >> >>>>> you can only turn off "refresh-expire" cascade, which will > >> prohibit the > >> >>>>> operation from traveling into the child objects. the collection is > >> >>>>> still > >> >>>>> refreshed for obvious reasons, its one of the attributes on your > >> mapped > >> >>>>> object. > > >> >>>>> To achieve your specified behavior, use session.refresh() given as > >> its > >> >>>>> second argument the set of attribute names which are safe to be > >> reloaded > >> >>>>> completely (in this case the scalars). Then for each uselist > >> >>>>> attribute, > >> >>>>> iterate the collection of each and call the desired version of > >> >>>>> session.refresh() for those. > > >> >>>>> This is an easy refresh() function to create in a generalized way > >> by > >> >>>>> inspecting the class-level attributes of the incoming object. > > > -- > > 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.