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.

Reply via email to