Skip to main content

Whoosh extension to SQLAlchemy

Project description

Supports the easy text-indexing of SQLAlchemy model fields.

BSD license.

Written by Stefane Fermigier (http://www.fermigier.com/) based on Flask-WhooshAlchemy written by Karl Gyllstromk.

Quick-start example

Import this library:

>>> from whooshalchemy import IndexService

Standard SQLAlchemy imports:

>>> from sqlalchemy.ext.declarative import declarative_base
>>> from sqlalchemy.schema import Column
>>> from sqlalchemy.types import Integer, Text, DateTime
>>> from sqlalchemy.engine import create_engine
>>> from sqlalchemy.orm.session import sessionmaker

Setup SQLAlchemy:

>>> engine = create_engine('sqlite:///:memory:')
>>> Session = sessionmaker(bind=engine)
>>> session = Session()
>>> Base = declarative_base()

Our model:

>>> class BlogPost(Base):
...   __tablename__ = 'blogpost'
...   __searchable__ = ['title', 'content']  # these fields will be indexed by whoosh
...
...   id = Column(Integer, primary_key=True)
...   title = Column(Text)
...   content = Column(Text)
...
...   def __repr__(self):
...       return '{0}(title={1})'.format(self.__class__.__name__, self.title)
...
>>> Base.metadata.create_all(engine)

Create and init indexing service:

>>> config = {"WHOOSH_BASE": "/tmp/whoosh"}
>>> index_service = IndexService(config=config, session=session)
>>> index_service.register_class(BlogPost)
FileIndex(FileStorage('/tmp/whoosh/BlogPost'), 'MAIN')

Create a blog post:

>>> m = BlogPost(title=u'My cool title', content=u'This is the first post.')
>>> session.add(m); session.commit()

Perform a few searches:

>>> list(BlogPost.search_query(u'cool'))
[BlogPost(title=My cool title)]
>>> list(BlogPost.search_query(u'first'))
[BlogPost(title=My cool title)]

Note: the response is a BaseQuery object, so you can append other SQL operations:

>>> list(BlogPost.search_query(u'first').filter(BlogPost.id >= 0))
[BlogPost(title=My cool title)]

Using with Flask

Setup you Flask app, create the db object (db = SQLAlchemy(app)), import your models.

Set WHOOSH_BASE to your Whoosh index directory in your Flask , then create the index service and register your models:

>>> index_service = IndexService(config=app.config)
>>> index_service.register_class(MyFirstModel)
>>> index_service.register_class(MySecondModel)

Etc.

CHANGES

Version 0.3.0 (2017/01/09)

  • Python 3 compatibility.

  • Use pytest instead of nose for tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

WhooshAlchemy-0.3.1.tar.gz (5.5 kB view details)

Uploaded Source

File details

Details for the file WhooshAlchemy-0.3.1.tar.gz.

File metadata

  • Download URL: WhooshAlchemy-0.3.1.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for WhooshAlchemy-0.3.1.tar.gz
Algorithm Hash digest
SHA256 30884a13557b9febbeeb31f8907e47ff7560314de85fede84d64fbe5fe989ec9
MD5 73147f4bd8f9ce1e2ed7e73f02f4e33c
BLAKE2b-256 636501fc3510ff51132dbebe6d8a0de08a93a54e227c7aa9962ca4d671e21ae0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page