theres no caching in SQLAlchemy. theres an identity map which has some of the same effects as a cache. basically, if you have already loaded your object into the current session, thats it. if you load it again, its going to use the same one you have, unless you clear the session, or refresh/expire the object. SA is not going to make a random guess as to what objects you want refreshed and which ones you are expecting to stay linked to the current editing session, which changes you want to keep and which ones youd like to discard.

consider this scenario: you load object A and object B into the current session. objects A and B have state information that is highly interdependent. you then make changes on B which depend highly on the current state of A. Then some functions are called to do some not totally related tasks. As a matter of course, within those function calls some other part of the application makes a select statement which also requests "A", which has now been modified in the database by another process.

returning from the function, A has been magically updated by an unknown actor, and B is now in an invalid state against the new version of A. the application breaks.

the point of the identity map is to prevent the above scenario, and the myriad of variations on it, from occurring. you are assured that every object, once loaded into the session, will not change unexpectedly without your say-so, and because their identity is assured, all changes made to that object identity are reflected consistently throughout the editing session; its state will always be consistent within the session. if you need multiple copies/states, then you use multiple sessions, or pick and choose who should be refreshed.

if you havent already, I totally overhauled the unit of work documentation yesterady in response to the recent spate of confusion over what an identity map and a unit of work is used for - http:// www.sqlalchemy.org/docs/unitofwork.myt . It also details the refresh/ expire/expunge methods as well as "per-object sessions" which may also provide a way for you to get fresh copies (i.e. myobj = mapper.using(Session()).get(1) will always be fresh...and unsaveable unless you import it into another session since the original one falls out of scope)

also, I would recommend Fowler's "Patterns of Enterprise Architecture" which is where I learned about all these patterns: http://www.martinfowler.com/books.html#eaa . SQLAlchemy's ORM is a python version of the "unit of work", "data mapper", and "identity map" patterns described in this book. If those arent the patterns you want to use, its going to be more of an uphill battle trying to make SA be something its not....but even then, it is possible, youd just have to write a layer on top of it to provide the patterns youre looking for (or write an ORM on top of the SQL construction facilities).


On Mar 26, 2006, at 1:33 PM, Florian Boesch wrote:

Seemingly SA is fairly liberal with interpreting my wish to get stuff from the
database.

So what's the pattern to deal with "session" "caching"?

I hear there's expunge etc. now, and expire, but that's all when I know what objects I want to have removed/expired/refreshed. Fact is, I don't, I wouldn't ask for an object from the database when I already had that very object...

So is there a way to end a session by force?
Can I disable all caching?
How do I deal with that?






-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel? cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users



-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to