"""MySQL connector.""" from contextlib import contextmanager from sqlalchemy import create_engine from sqlalchemy.orm import declarative_base, scoped_session, sessionmaker from sales_goals import config BaseModel = declarative_base() _sales_goals_engine = create_engine( config.SG_DB_CONNECTION_STRING, poolclass=config.DB_POOLCLASS) _sales_goals_factory = sessionmaker( bind=_sales_goals_engine, expire_on_commit=False) Session = scoped_session(_sales_goals_factory) @contextmanager def sales_goals_session_scope(): """Provide a transactional scope around a series of operations. Taken from http://docs.sqlalchemy.org/en/latest/orm/session_basics.html. This handles rollback and closing of session, so there is no need to do that throughout the code. Usage: with sales_goals_session_scope() as session: session.execute(query) """ session = Session() try: yield session session.commit() except Exception: session.rollback() raise finally: session.close() _art_relations_engine = create_engine( config.AR_DB_CONNECTION_STRING, poolclass=config.DB_POOLCLASS) _art_relations_factory = sessionmaker( bind=_art_relations_engine, expire_on_commit=False) ARSession = scoped_session(_art_relations_factory) @contextmanager def art_relations_session_scope(): """Provide a transactional scope around a series of operations. Taken from http://docs.sqlalchemy.org/en/latest/orm/session_basics.html. This handles rollback and closing of session, so there is no need to do that throughout the code. Usage: with sales_goals_session_scope() as session: session.execute(query) """ session = ARSession() try: yield session session.commit() except Exception: session.rollback() raise finally: session.close()