diff options
Diffstat (limited to 'examples/beaker_caching/helloworld.py')
-rw-r--r-- | examples/beaker_caching/helloworld.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/examples/beaker_caching/helloworld.py b/examples/beaker_caching/helloworld.py new file mode 100644 index 000000000..33454cf80 --- /dev/null +++ b/examples/beaker_caching/helloworld.py @@ -0,0 +1,62 @@ +"""helloworld.py + +Illustrate how to load some data, and cache the results. + +""" + +import __init__ # if running as a script +from model import Person +from meta import Session, FromCache + +# load Person objects. cache the result under the namespace "all_people". +print "loading people...." +people = Session.query(Person).options(FromCache("default", "all_people")).all() + +# remove the Session. next query starts from scratch. +Session.remove() + +# load again, using the same FromCache option. now they're cached +# under "all_people", no SQL is emitted. +print "loading people....again!" +people = Session.query(Person).options(FromCache("default", "all_people")).all() + +# want to load on some different kind of query ? change the namespace +# you send to FromCache +print "loading people two through twelve" +people_two_through_twelve = Session.query(Person).\ + options(FromCache("default", "people_on_range")).\ + filter(Person.name.between("person 02", "person 12")).\ + all() + +# the data is cached under the "namespace" you send to FromCache, *plus* +# the bind parameters of the query. So this query, having +# different literal parameters under "Person.name.between()" than the +# previous one, issues new SQL... +print "loading people five through fifteen" +people_five_through_fifteen = Session.query(Person).\ + options(FromCache("default", "people_on_range")).\ + filter(Person.name.between("person 05", "person 15")).\ + all() + + +# ... but using the same params as are already cached, no SQL +print "loading people two through twelve...again!" +people_two_through_twelve = Session.query(Person).\ + options(FromCache("default", "people_on_range")).\ + filter(Person.name.between("person 02", "person 12")).\ + all() + + +# invalidate the cache for the three queries we've done. Recreate +# each Query, which includes at the very least the same FromCache, +# same list of objects to be loaded, and the same parameters in the +# same order, then call invalidate(). +print "invalidating everything" +Session.query(Person).options(FromCache("default", "all_people")).invalidate() +Session.query(Person).\ + options(FromCache("default", "people_on_range")).\ + filter(Person.name.between("person 02", "person 12")).invalidate() +Session.query(Person).\ + options(FromCache("default", "people_on_range")).\ + filter(Person.name.between("person 05", "person 15")).invalidate() + |