summaryrefslogtreecommitdiff
path: root/examples/beaker_caching/helloworld.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-01-13 20:00:25 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2010-01-13 20:00:25 +0000
commit2d65e9772d9b96d0392e253e5fb9433e71e18393 (patch)
tree44e26df71ac6be95bc5e60ed97ef8ecacb3c0ca5 /examples/beaker_caching/helloworld.py
parentdb4af57e206b059a8d3e78a971834982fa8aa062 (diff)
downloadsqlalchemy-2d65e9772d9b96d0392e253e5fb9433e71e18393.tar.gz
add more examples, start basic
Diffstat (limited to 'examples/beaker_caching/helloworld.py')
-rw-r--r--examples/beaker_caching/helloworld.py62
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()
+