Sqlalchemy And Falcon - Session Initialization
I'm wondering where the best place would be to create a scoped session for use in falcon. From reading the flask-sqlalchemy code, it, in a round about way, does something like this
Solution 1:
You can use middleware
Example.
Create engine, session_factory and scoped_session object.
from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session from 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.
classSQLAlchemySessionManager: """ Create a scoped session for every request and close it when the request ends. """def__init__(self, Session): self.Session = Session defprocess_resource(self, req, resp, resource, params): resource.session = self.Session() defprocess_response(self, req, resp, resource, req_succeeded): ifhasattr(resource, 'session'): Session.remove()
Register middleware.
importfalconapp= falcon.API(middleware=[ SQLAlchemySessionManager(Session), ])
Session is accessible in every request.
import falcon classMyAPI: defon_get(self, req, resp): # You can access self.session here# self.session.add(foo)# self.session.commit()
Solution 2:
There is a package on pypi, falcon-sqla, that provides a middleware to manage SQLAlchemy sessions with Falcon.
It uses the request context object to add a different session to each http request, avoiding the need to use a scoped session.
Post a Comment for "Sqlalchemy And Falcon - Session Initialization"