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.