Flask-FTSCursor
An extension to facilitate using FTSCursor with Flask
Installation
pip3 install flask-ftscursor
Mission Statement
This package was inspired by Miguel Grinberg's Flask Mega-Tutorial, specifically Chapter 16: Full-Text Search. Even more specifically, it was this sentence:
Using the searching capabilities of one of the relational databases could also be a good choice, but given the fact that SQLAlchemy does not support this functionality, I would have to handle the searching with raw SQL statements, or else find a package that provides high-level access to text searches while being able to coexist with SQLAlchemy.
Flask-FTSCursor is such a package. It provides high-level access to SQLite3 full-text searches while being able to coexist harmoniously with SQLAlchemy.
Tutorial
This will be a very minimal demonstration of the FTS object. For an example of
an app that uses Flask-FTSCursor, see ucsd-bisb-unofficial.
First import the things we will need
import sqlite3
from flask import Flask
from flask_ftscursor import FTS
Create a FTS object
fts = FTS()
Define an application factory function
def create_app():
app = Flask(__name__)
app.config['FTS_DATABASE'] = 'fts.db'
app.config['FTS_SOURCE_DATABASE'] = 'app.db'
fts.init_app(app)
return app
Create the app
app = create_app()
Put some data in the source database
conn = sqlite3.connect(app.config['FTS_SOURCE_DATABASE'])
c = conn.cursor()
c.executescript('''
CREATE TABLE my_table(id INTEGER, body TEXT);
INSERT INTO my_table(id, body) VALUES
(1, 'this is a test'),
(2, 'a second test');
'''
)
conn.commit()
Try a search (this will fail, because nothing has been indexed yet)
with app.app_context()
app.fts.search(table='my_table', query='this test', page=1, per_page=2)
Index some rows from the source database (adding them to the FTS database)
with app.app_context()
app.fts.index(table='my_table', id=1, searchable=('body',))
app.fts.index(table='my_table', id=2, searchable=('body',))
Perform a full-text search
with app.app_context()
app.fts.search(table='my_table', query='this test', page=1, per_page=2)
{'hits': {'total': 1, 'hits': ({'_id': 1},)}}
Try a different query
with app.app_context()
app.fts.search(table='my_table', query='second', page=1, per_page=2)
{'hits': {'total': 1, 'hits': ({'_id': 2},)}}
Drop the FTS table, removing its contents from the FTS database
with app.app_context()
app.fts.drop(table='my_table')
Configuration
Flask-FTSCursor relies on two items in the app's configuration: FTS_DATABASE
and FTS_SOURCE_DATABASE.
The value of FTS_SOURCE_DATABASE should be the file path of the app's main
SQLite3 database, or whichever database contains the entries that will be
indexed. The value of FTS_DATABSE should be the file path where the database
containing the FTS tables will be kept.
Abstraction
Flask-FTSCursor provides functions named add_to_index(),
remove_from_index(), and query_index() which can be used in place of the
similarly named functions given in Miguel Grinberg's Flask Mega-Tutorial,
Chapter 16: Full-Text Search,
under the section titled "A Full-Text Search Abstraction." For an example of
an app that uses these functions, see ucsd-bisb-unofficial.
Release files for Flask-FTSCursor 0.2.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| Flask-FTSCursor-0.2.6.tar.gz | 5.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| Flask_FTSCursor-0.2.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.8 kB
Release files / Flask-FTSCursor-0.2.6.tar.gz
| Download URL | Flask-FTSCursor-0.2.6.tar.gz |
|---|---|
| Size | 5.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
534c4566af30f5cf08c83438d0f166c7e982b9ba4d3c3b1412ce1d609e3cd64c
|
|
BLAKE2b-256 checksum How to use checksums |
6bcf3bd652fa968a3e518c7b3b4d09f488d257b64ee3e8763d3d60b5ac82040d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.9.10
|
Release files / Flask_FTSCursor-0.2.6-py3-none-any.whl
| Download URL | Flask_FTSCursor-0.2.6-py3-none-any.whl |
|---|---|
| Size | 5.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e5cd6b488e3cc20f8d369a47e6877029a8a8d5367932155b05ce93fd135ffc93
|
|
BLAKE2b-256 checksum How to use checksums |
9c20a7b969c755ca48e5bb26ab3e3866d936fafa9a4141972dafaa0f29010fbd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.9.10
|