User Guide
The falcon_sqla session Manager can be used in two
ways:
As a context manager to explicitly provide a database session.
Configuration
Create a SQLAlchemy engine.
Pass the engine to the
Manager()initializer as its first parameter.If using the manager as a middleware component, pass its
middlewareproperty to a falcon.App's middleware list:
engine = create_engine('dialect+driver://my/database')
manager = falcon_sqla.Manager(engine)
app = falcon.App(middleware=[manager.middleware])
# The database session will be available as req.context.session
Context Manager
A falcon_sqla.Manager can also explicitly provide a database session
using the session_scope() context manager:
# Somewhere inside a responder
with self.manager.session_scope(req, resp) as session:
# Use the session
# <...>
session_scope() can also be used as a standalone
session context outside of the request-response cycle:
with self.manager.session_scope() as session:
# Use the session
# <...>
Custom Vertical Partitioning
Simple random selection of read- and write- database replicas is supported
out of the box. Use the add_engine() method to
instruct the Manager to include the provided engines in
the runtime bind selection logic:
manager = falcon_sqla.Manager(engine)
read_replica = create_engine('dialect+driver://my/database.replica')
manager.add_engine(read_replica, falcon_sqla.EngineRole.READ)
The Manager.get_bind() method can be
overridden to implement custom engine selection logic for more complex use
cases.
See also this SQLAlchemy recipe: Custom Vertical Partitioning.