you can reattach the object to a session later if you need it to be
part of a transaction again. it can be used for caching scenarios,
for example. But I agree most reasonable applications probably won't
use expunge() very much.
What happens if you do not call expunge on it, but pickle the object in a
cache, load it later and then merge it?
Wichert.
--
Wichert Akkerman <wic...@wiggy.net> It is simple to make things.
http://www.wiggy.net/ It is hard to make things simple.
>
> What happens if you do not call expunge on it, but pickle the object
> in a
> cache, load it later and then merge it?
the state of the newly unpickled object, that is the current value of
its mapped attributes, would be merged with the persistent version in
the session. merge() will load the object from the database into an
in-session, persistent instance before merging the external state.
because your unpickled instance never actually enters the session,
conflicts with its previous session or an already present in-session
object are nicely avoided.
I actually skip that and invalidate the cache entry on changes to
prevent that SQL hit. What I meant was: does it matter if you never
explicitly call expunge?
>
> Previously Michael Bayer wrote:
>> On Feb 26, 2009, at 8:21 AM, Wichert Akkerman wrote:
>>> What happens if you do not call expunge on it, but pickle the object
>>> in a
>>> cache, load it later and then merge it?
>>
>> the state of the newly unpickled object, that is the current value of
>> its mapped attributes, would be merged with the persistent version in
>> the session. merge() will load the object from the database into an
>> in-session, persistent instance before merging the external state.
>> because your unpickled instance never actually enters the session,
>> conflicts with its previous session or an already present in-session
>> object are nicely avoided.
>
> I actually skip that and invalidate the cache entry on changes to
> prevent that SQL hit. What I meant was: does it matter if you never
> explicitly call expunge?
for pickling ? not at all.