summaryrefslogtreecommitdiff
path: root/examples/beaker_caching/advanced.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-10-21 16:54:42 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2012-10-21 16:54:42 -0400
commit39d17c76df542d0040c2c8db2d2e3dc897b5cce5 (patch)
treef5aeba8be0f61c0db8d5ba0e76efdaa593cd85c4 /examples/beaker_caching/advanced.py
parentf2bc0ddcb496e6a0cb0a0ad88c7c055dbf0c11a7 (diff)
downloadsqlalchemy-39d17c76df542d0040c2c8db2d2e3dc897b5cce5.tar.gz
- converted beaker demo to dogpile.cache, [ticket:2589]
Diffstat (limited to 'examples/beaker_caching/advanced.py')
-rw-r--r--examples/beaker_caching/advanced.py79
1 files changed, 0 insertions, 79 deletions
diff --git a/examples/beaker_caching/advanced.py b/examples/beaker_caching/advanced.py
deleted file mode 100644
index 31beeff6f..000000000
--- a/examples/beaker_caching/advanced.py
+++ /dev/null
@@ -1,79 +0,0 @@
-"""advanced.py
-
-Illustrate usage of Query combined with the FromCache option,
-including front-end loading, cache invalidation, namespace techniques
-and collection caching.
-
-"""
-
-from environment import Session
-from model import Person, Address, cache_address_bits
-from caching_query import FromCache, RelationshipCache
-from sqlalchemy.orm import joinedload
-
-def load_name_range(start, end, invalidate=False):
- """Load Person objects on a range of names.
-
- start/end are integers, range is then
- "person <start>" - "person <end>".
-
- The cache option we set up is called "name_range", indicating
- a range of names for the Person class.
-
- The `Person.addresses` collections are also cached. Its basically
- another level of tuning here, as that particular cache option
- can be transparently replaced with joinedload(Person.addresses).
- The effect is that each Person and his/her Address collection
- is cached either together or separately, affecting the kind of
- SQL that emits for unloaded Person objects as well as the distribution
- of data within the cache.
- """
- q = Session.query(Person).\
- filter(Person.name.between("person %.2d" % start, "person %.2d" % end)).\
- options(cache_address_bits).\
- options(FromCache("default", "name_range"))
-
- # have the "addresses" collection cached separately
- # each lazyload of Person.addresses loads from cache.
- q = q.options(RelationshipCache("default", "by_person", Person.addresses))
-
- # alternatively, eagerly load the "addresses" collection, so that they'd
- # be cached together. This issues a bigger SQL statement and caches
- # a single, larger value in the cache per person rather than two
- # separate ones.
- #q = q.options(joinedload(Person.addresses))
-
- # if requested, invalidate the cache on current criterion.
- if invalidate:
- q.invalidate()
-
- return q.all()
-
-print "two through twelve, possibly from cache:\n"
-print ", ".join([p.name for p in load_name_range(2, 12)])
-
-print "\ntwenty five through forty, possibly from cache:\n"
-print ", ".join([p.name for p in load_name_range(25, 40)])
-
-# loading them again, no SQL is emitted
-print "\ntwo through twelve, from the cache:\n"
-print ", ".join([p.name for p in load_name_range(2, 12)])
-
-# but with invalidate, they are
-print "\ntwenty five through forty, invalidate first:\n"
-print ", ".join([p.name for p in load_name_range(25, 40, True)])
-
-# illustrate the address loading from either cache/already
-# on the Person
-print "\n\nPeople plus addresses, two through twelve, addresses possibly from cache"
-for p in load_name_range(2, 12):
- print p.format_full()
-
-# illustrate the address loading from either cache/already
-# on the Person
-print "\n\nPeople plus addresses, two through twelve, addresses from cache"
-for p in load_name_range(2, 12):
- print p.format_full()
-
-print "\n\nIf this was the first run of advanced.py, try "\
- "a second run. Only one SQL statement will be emitted."