Skip to content
A CachingQuery implementation to Flask using Flask-SQLAlchemy and Flask-Caching
Branch: master
Clone or download
Pull request Compare This branch is 14 commits ahead of iurisilvio:master.
Latest commit 66edd1e Mar 14, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples Rename to Flask-SQLAlchemy-Caching Aug 15, 2017
flask_sqlalchemy_caching
.gitignore 🏠 Repo housecleaning Feb 9, 2018
.travis.yml Drop Python 2.7 support Mar 14, 2019
LICENSE Initial commit Jul 23, 2014
README.md fixed markdown link Nov 8, 2017
setup.cfg
setup.py
tox.ini Improve travis support. Mar 26, 2016

README.md

Flask-SQLAlchemy-Caching

This is a fork of iurisilvio's Flask-SQLAlchemy-Cache

A CachingQuery implementation to Flask using Flask-SQLAlchemy and Flask-Caching.

To start using caching queries, you just have to replace Flask-SQLAlchemy Model.query_class.

from flask_sqlalchemy import SQLAlchemy
from flask_sqlalchemy_caching import CachingQuery
from flask_caching import Cache

db = SQLAlchemy(app, query_class=CachingQuery)

cache = Cache(app)

After that, you can just make queries to a model YourModel:

from flask_sqlalchemy_caching import FromCache

# cache is a Flask-Caching instance imported for your app init
YourModel.query.options(FromCache(cache)).get()

You also have RelationshipCache to enable lazy loading relationships from cache.

from sqlalchemy.orm import lazyload
from flask_sqlalchemy_caching import RelationshipCache

rc = RelationshipCache(YourModel.some_relationship, cache)
obj = YourModel.query.options(lazyload(YourModel.some_relationship), rc).get()

# make the query and cache the results for future queries
print(obj.some_relationship)

If there is a column in your table that is much more dynamic and you want to exclude it from being cached, try using a deferred query like:

YourModel.query.options(defer('crazy_column')).options(FromCache(cache)).get()

Take a look at Dogpile Caching example to more details about how CachingQuery works. Most changes to their were made just to integrate it with Flask, Flask-SQLAlchemy and Flask-Caching instead of Dogpile.

You can’t perform that action at this time.