File: //usr/share/doc/python-sqlalchemy-0.9.8/doc/_modules/examples/dogpile_caching/helloworld.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
examples.dogpile_caching.helloworld
—
SQLAlchemy 0.9 Documentation
</title>
<!-- begin iterate through SQLA + sphinx environment css_files -->
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/docs.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/sphinx_paramlinks.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/changelog.css" type="text/css" />
<!-- end iterate through SQLA + sphinx environment css_files -->
<!-- begin layout.mako headers -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../../',
VERSION: '0.9.8',
COLLAPSE_MODINDEX: false,
FILE_SUFFIX: '.html'
};
</script>
<!-- begin iterate through sphinx environment script_files -->
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<!-- end iterate through sphinx environment script_files -->
<script type="text/javascript" src="../../../_static/detectmobile.js"></script>
<script type="text/javascript" src="../../../_static/init.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
<link rel="copyright" title="Copyright" href="../../../copyright.html" />
<link rel="top" title="SQLAlchemy 0.9 Documentation" href="../../../index.html" />
<link rel="up" title="Module code" href="../../index.html" />
<!-- end layout.mako headers -->
</head>
<body>
<div id="docs-container">
<div id="docs-top-navigation-container" class="body-background">
<div id="docs-header">
<div id="docs-version-header">
Release: <span class="version-num">0.9.8</span> | Release Date: October 13, 2014
</div>
<h1>SQLAlchemy 0.9 Documentation</h1>
</div>
</div>
<div id="docs-body-container">
<div id="fixed-sidebar" class="">
<div id="index-nav">
<form class="search" action="../../../search.html" method="get">
<input type="text" name="q" size="12" /> <input type="submit" value="Search" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p>
<a href="../../../index.html">Contents</a> |
<a href="../../../genindex.html">Index</a>
</p>
</div>
</div>
<div id="docs-body" class="" >
<h1>Source code for examples.dogpile_caching.helloworld</h1><div class="highlight"><pre>
<span class="sd">"""helloworld.py</span>
<span class="sd">Illustrate how to load some data, and cache the results.</span>
<span class="sd">"""</span>
<span class="kn">from</span> <span class="nn">.environment</span> <span class="kn">import</span> <span class="n">Session</span>
<span class="kn">from</span> <span class="nn">.model</span> <span class="kn">import</span> <span class="n">Person</span>
<span class="kn">from</span> <span class="nn">.caching_query</span> <span class="kn">import</span> <span class="n">FromCache</span>
<span class="c"># load Person objects. cache the result in the "default" cache region</span>
<span class="k">print</span><span class="p">(</span><span class="s">"loading people...."</span><span class="p">)</span>
<span class="n">people</span> <span class="o">=</span> <span class="n">Session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">Person</span><span class="p">)</span><span class="o">.</span><span class="n">options</span><span class="p">(</span><span class="n">FromCache</span><span class="p">(</span><span class="s">"default"</span><span class="p">))</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="c"># remove the Session. next query starts from scratch.</span>
<span class="n">Session</span><span class="o">.</span><span class="n">remove</span><span class="p">()</span>
<span class="c"># load again, using the same FromCache option. now they're cached,</span>
<span class="c"># so no SQL is emitted.</span>
<span class="k">print</span><span class="p">(</span><span class="s">"loading people....again!"</span><span class="p">)</span>
<span class="n">people</span> <span class="o">=</span> <span class="n">Session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">Person</span><span class="p">)</span><span class="o">.</span><span class="n">options</span><span class="p">(</span><span class="n">FromCache</span><span class="p">(</span><span class="s">"default"</span><span class="p">))</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="c"># Specifying a different query produces a different cache key, so</span>
<span class="c"># these results are independently cached.</span>
<span class="k">print</span><span class="p">(</span><span class="s">"loading people two through twelve"</span><span class="p">)</span>
<span class="n">people_two_through_twelve</span> <span class="o">=</span> <span class="n">Session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">Person</span><span class="p">)</span><span class="o">.</span>\
<span class="n">options</span><span class="p">(</span><span class="n">FromCache</span><span class="p">(</span><span class="s">"default"</span><span class="p">))</span><span class="o">.</span>\
<span class="nb">filter</span><span class="p">(</span><span class="n">Person</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">between</span><span class="p">(</span><span class="s">"person 02"</span><span class="p">,</span> <span class="s">"person 12"</span><span class="p">))</span><span class="o">.</span>\
<span class="nb">all</span><span class="p">()</span>
<span class="c"># the data is cached under string structure of the SQL statement, *plus*</span>
<span class="c"># the bind parameters of the query. So this query, having</span>
<span class="c"># different literal parameters under "Person.name.between()" than the</span>
<span class="c"># previous one, issues new SQL...</span>
<span class="k">print</span><span class="p">(</span><span class="s">"loading people five through fifteen"</span><span class="p">)</span>
<span class="n">people_five_through_fifteen</span> <span class="o">=</span> <span class="n">Session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">Person</span><span class="p">)</span><span class="o">.</span>\
<span class="n">options</span><span class="p">(</span><span class="n">FromCache</span><span class="p">(</span><span class="s">"default"</span><span class="p">))</span><span class="o">.</span>\
<span class="nb">filter</span><span class="p">(</span><span class="n">Person</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">between</span><span class="p">(</span><span class="s">"person 05"</span><span class="p">,</span> <span class="s">"person 15"</span><span class="p">))</span><span class="o">.</span>\
<span class="nb">all</span><span class="p">()</span>
<span class="c"># ... but using the same params as are already cached, no SQL</span>
<span class="k">print</span><span class="p">(</span><span class="s">"loading people two through twelve...again!"</span><span class="p">)</span>
<span class="n">people_two_through_twelve</span> <span class="o">=</span> <span class="n">Session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">Person</span><span class="p">)</span><span class="o">.</span>\
<span class="n">options</span><span class="p">(</span><span class="n">FromCache</span><span class="p">(</span><span class="s">"default"</span><span class="p">))</span><span class="o">.</span>\
<span class="nb">filter</span><span class="p">(</span><span class="n">Person</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">between</span><span class="p">(</span><span class="s">"person 02"</span><span class="p">,</span> <span class="s">"person 12"</span><span class="p">))</span><span class="o">.</span>\
<span class="nb">all</span><span class="p">()</span>
<span class="c"># invalidate the cache for the three queries we've done. Recreate</span>
<span class="c"># each Query, which includes at the very least the same FromCache,</span>
<span class="c"># same list of objects to be loaded, and the same parameters in the</span>
<span class="c"># same order, then call invalidate().</span>
<span class="k">print</span><span class="p">(</span><span class="s">"invalidating everything"</span><span class="p">)</span>
<span class="n">Session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">Person</span><span class="p">)</span><span class="o">.</span><span class="n">options</span><span class="p">(</span><span class="n">FromCache</span><span class="p">(</span><span class="s">"default"</span><span class="p">))</span><span class="o">.</span><span class="n">invalidate</span><span class="p">()</span>
<span class="n">Session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">Person</span><span class="p">)</span><span class="o">.</span>\
<span class="n">options</span><span class="p">(</span><span class="n">FromCache</span><span class="p">(</span><span class="s">"default"</span><span class="p">))</span><span class="o">.</span>\
<span class="nb">filter</span><span class="p">(</span><span class="n">Person</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">between</span><span class="p">(</span><span class="s">"person 02"</span><span class="p">,</span> <span class="s">"person 12"</span><span class="p">))</span><span class="o">.</span><span class="n">invalidate</span><span class="p">()</span>
<span class="n">Session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">Person</span><span class="p">)</span><span class="o">.</span>\
<span class="n">options</span><span class="p">(</span><span class="n">FromCache</span><span class="p">(</span><span class="s">"default"</span><span class="p">,</span> <span class="s">"people_on_range"</span><span class="p">))</span><span class="o">.</span>\
<span class="nb">filter</span><span class="p">(</span><span class="n">Person</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">between</span><span class="p">(</span><span class="s">"person 05"</span><span class="p">,</span> <span class="s">"person 15"</span><span class="p">))</span><span class="o">.</span><span class="n">invalidate</span><span class="p">()</span></pre></div>
</div>
</div>
<div id="docs-bottom-navigation" class="docs-navigation-links">
<div id="docs-copyright">
© <a href="../../../copyright.html">Copyright</a> 2007-2014, the SQLAlchemy authors and contributors.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.2b1.
</div>
</div>
</div>
</body>
</html>