Skip to content Skip to sidebar Skip to footer

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.

  1. 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)
    
  2. 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()
    
  3. Register middleware.

    importfalconapp= falcon.API(middleware=[
        SQLAlchemySessionManager(Session),
    ])
    
  4. 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"