SQLAlchemy-Facets is an utility based on SQLAlchemy that aims to provide easy-to-use and efficient helpers to build category based filters and do search with multiple criterias.
Its purpose is to be similar to ElasticSearch's feature terms aggregation.
Install and update using pip:
$ pip install -U sqlalchemy-facets
class Movie(Base):
id = Column(Integer, primary_key=True)
name = Column(String)
genre = Column(String)
language = Column(String)
from sqlalchemy_facets import declare_facets
f = declare_facets("genre", "language")
# Main query
all_movies = session.query(Movie)
# Facets query
facets = f.get_facets(all_movies)
>>> pprint(facets)
{
"genre" {
"buckets": [
{"value": "horror", "count": 23},
{"value": "action", "count": 52},
{"value": "comedy", "count": 34}
]
},
"language": {
"buckets": [
{"value": "English", "count": 75},
{"value": "Spanish", "count": 12},
{"value": "French", "count" 23}
]
}
}
Let's query (french OR spanish) AND (action OR comedy) movies !
>>> selection = [
>>> {"genre": {"values": ["action", "comedy" ]}},
>>> {"language": {"values": ["Spanish", "French"]}}
>>> ]
>>>
>>> f.apply_filter(all_movies, selection).all()