summaryrefslogtreecommitdiff
path: root/examples/beaker_caching/relation_caching.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/beaker_caching/relation_caching.py')
-rw-r--r--examples/beaker_caching/relation_caching.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/examples/beaker_caching/relation_caching.py b/examples/beaker_caching/relation_caching.py
new file mode 100644
index 000000000..b4508ba1e
--- /dev/null
+++ b/examples/beaker_caching/relation_caching.py
@@ -0,0 +1,25 @@
+"""relation_caching.py
+
+Load a set of Person and Address objects, specifying that
+related PostalCode, City, Country objects should be pulled from long
+term cache.
+
+"""
+import __init__ # if running as a script
+from model import Person, Address, cache_address_bits
+from meta import Session
+from sqlalchemy.orm import eagerload
+import os
+
+for p in Session.query(Person).options(eagerload(Person.addresses), cache_address_bits):
+ print p.format_full()
+
+
+print "\n\nIf this was the first run of relation_caching.py, SQL was likely emitted to "\
+ "load postal codes, cities, countries.\n"\
+ "If run a second time, only a single SQL statement will run - all "\
+ "related data is pulled from cache.\n"\
+ "To clear the cache, delete the directory %r. \n"\
+ "This will cause a re-load of cities, postal codes and countries on "\
+ "the next run.\n"\
+ % os.path.join(__init__.root, 'container_file')