To integrate SQLAlchemy with Falcon framework we can use middleware component. I will show you how to create a simple middleware which will create a session for every request and roll back changes if something fails.
Create engine, session_factory
and scoped_session
object.
from sqlalchemy import create_enginefrom sqlalchemy.orm import scoped_sessionfrom sqlalchemy.orm import sessionmaker
import settings
engine = create_engine( '{engine}://{username}:{password}@{host}:{port}/{db_name}'.format( **settings.POSTGRESQL ))
session_factory = sessionmaker(bind=engine)Session = scoped_session(session_factory)
Create middleware.
class SQLAlchemySessionManager: """ Create a scoped session for every request and close it when the request ends. """
def __init__(self, Session): self.Session = Session
def process_resource(self, req, resp, resource, params): resource.session = self.Session()
def process_response(self, req, resp, resource, req_succeeded): if hasattr(resource, 'session'): if not req_succeeded: resource.session.rollback() Session.remove()
Register middleware.
import falcon
app = falcon.API(middleware=[ SQLAlchemySessionManager(Session),])
Session is accessible for every request.
import falcon
class MyAPI:
def on_get(self, req, resp): # You can access self.session here # self.session.add(foo) # self.session.commit()