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