Skip to content

taebow/sqlalchemy-facets

Repository files navigation

SQLAlchemy-Facets

https://travis-ci.org/tteaka/sqlalchemy-facets.svg?branch=master

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.

https://i.ibb.co/ZLHxGDv/work-in-progress.png

Installing

Install and update using pip:

$ pip install -U sqlalchemy-facets

A Simple Example

Model definition

class Movie(Base):
    id = Column(Integer, primary_key=True)
    name = Column(String)
    genre = Column(String)
    language = Column(String)

Configuration

from sqlalchemy_facets import declare_facets

f = declare_facets("genre", "language")

Querying

# Main query
all_movies = session.query(Movie)

# Facets query
facets = f.get_facets(all_movies)

Result

>>> 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}
        ]
    }
}

Filter

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()

Links

About

Faceted search for SQLAlchemy queries

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages