27 lines
1.1 KiB
Python
27 lines
1.1 KiB
Python
import sqlalchemy
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
|
|
class SQLManager(object):
|
|
# Cache the database connection per application process.
|
|
# More properly, this should be kept in thread-local state (threading.local()), but should suffice.
|
|
# Each passed connection url will have its own pool.
|
|
engines = {}
|
|
|
|
@classmethod
|
|
def get_sql_session_maker(cls, heroku_postgres_url, should_echo=False, cache=True):
|
|
if not cache:
|
|
return sessionmaker(bind=cls.connect(heroku_postgres_url, should_echo=should_echo))()
|
|
else:
|
|
engine = cls.engines.setdefault(heroku_postgres_url,
|
|
cls.connect(heroku_postgres_url, should_echo=should_echo))
|
|
|
|
return sessionmaker(bind=engine)()
|
|
|
|
@staticmethod
|
|
def connect(heroku_postgres_url, should_echo=False):
|
|
if heroku_postgres_url:
|
|
return sqlalchemy.create_engine(heroku_postgres_url, echo=should_echo)
|
|
else:
|
|
return sqlalchemy.create_engine('postgres://pivotal:@localhost/pivotal', echo=True)
|