Flask-SQLAlchemy integration#

Warning

The query interface is considered legacy in SQLAlchemy. Prefer using session.execute(search(...)) instead.

SQLAlchemy-Searchable can be integrated into Flask-SQLAlchemy using SearchQueryMixin class:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_sqlalchemy.query import Query
from sqlalchemy_utils.types import TSVectorType
from sqlalchemy_searchable import SearchQueryMixin, make_searchable

app = Flask(__name__)
db = SQLAlchemy(app)

make_searchable(db.metadata)


class ArticleQuery(Query, SearchQueryMixin):
    pass


class Article(db.Model):
    query_class = ArticleQuery
    __tablename__ = "article"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))
    content = db.Column(db.Text)
    search_vector = db.Column(TSVectorType("name", "content"))


db.configure_mappers()  # very important!

with app.app_context():
    db.create_all()

The SearchQueryMixin provides a search method to ArticleQuery. You can chain calls just like when using query filter calls. Here we search for first five articles that contain the word “Finland”:

Article.query.search("Finland").limit(5).all()