[sqlalchemy] Re: What's the use of expunge?

2009-02-26 Thread Michael Bayer


On Feb 26, 2009, at 1:29 AM, 一首诗 wrote:


 The document says:

 
 Expunge removes an object from the Session, sending persistent
 instances to the detached state, and pending instances to the
 transient state:

 

 I hoped that if an instance was expunged from a session, I might use
 it safely as a container of some temp data without fearing trigger any
 database query.

 But I found that if an object is 'expunge'd ,  it's properties will
 not be accessible anymore.

 So, when should we use expunge?  Or it is kept for sqlalchemy inner
 use only?

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.



--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@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
-~--~~~~--~~--~--~---



[sqlalchemy] Re: What's the use of expunge?

2009-02-26 Thread Wichert Akkerman

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?

Wichert.

-- 
Wichert Akkerman wich...@wiggy.netIt is simple to make things.
http://www.wiggy.net/   It is hard to make things simple.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@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
-~--~~~~--~~--~--~---



[sqlalchemy] Re: What's the use of expunge?

2009-02-26 Thread Michael Bayer


On Feb 26, 2009, at 10:27 AM, Wichert Akkerman wrote:


 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. 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@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
-~--~~~~--~~--~--~---