diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-01-13 20:00:25 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-01-13 20:00:25 +0000 |
commit | 2d65e9772d9b96d0392e253e5fb9433e71e18393 (patch) | |
tree | 44e26df71ac6be95bc5e60ed97ef8ecacb3c0ca5 /examples/beaker_caching/helloworld.py | |
parent | db4af57e206b059a8d3e78a971834982fa8aa062 (diff) | |
download | sqlalchemy-2d65e9772d9b96d0392e253e5fb9433e71e18393.tar.gz |
add more examples, start basic
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() + |