Skip to content

Instantly share code, notes, and snippets.

@aradriel
Created March 10, 2012 18:34
Show Gist options
  • Save aradriel/2012418 to your computer and use it in GitHub Desktop.
Save aradriel/2012418 to your computer and use it in GitHub Desktop.
import eventlet.patcher
eventlet.patcher.monkey_patch()
import eventlet.db_pool
import sqlalchemy.orm
import sqlalchemy.pool
import psycopg2
_ENGINE = None
_MAKER = None
pgDBurl="postgresql://"
def get_session(autocommit=True, expire_on_commit=False):
"""Return a SQLAlchemy session."""
global _ENGINE, _MAKER
if _MAKER is None or _ENGINE is None:
_ENGINE = get_engine()
_MAKER = get_maker(_ENGINE, autocommit, expire_on_commit)
session = _MAKER()
return session
def get_maker(engine, autocommit=True, expire_on_commit=False):
"""Return a SQLAlchemy sessionmaker using the given engine."""
return sqlalchemy.orm.sessionmaker(bind=engine,
autocommit=autocommit,
expire_on_commit=expire_on_commit)
def get_engine():
"""Return a SQLAlchemy engine."""
poolCreator = eventlet.db_pool.ConnectionPool(psycopg2, host=_host, user=_user, password=_passw, dbname=_db, min_size=1, max_size=10, max_idle=60)
return sqlalchemy.create_engine(pgDBurl, pool_recycle=180, pool_size=4, pool_timeout=30, max_overflow=0, creator=poolCreator.create)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment