-from types import StringTypes
-
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
class Alchemy:
def __init__ (self, config):
- dbname="sfa"
+ dbname = "sfa"
# will be created lazily on-demand
self._session = None
# the former PostgreSQL.py used the psycopg2 directly and was doing
(config.SFA_DB_USER,config.SFA_DB_PASSWORD,config.SFA_DB_HOST,config.SFA_DB_PORT,dbname)
for url in [ unix_url, tcp_url ] :
try:
+ logger.debug("Trying db URL %s"%url)
self.engine = create_engine (url)
self.check()
self.url=url
except:
pass
self.engine=None
- raise Exception,"Could not connect to database"
-
+ raise Exception("Could not connect to database %s as %s with psycopg2"%(dbname,config.SFA_DB_USER))
+
# expects boolean True: debug is ON or False: debug is OFF
def debug (self, echo):
def check (self):
self.engine.execute ("select 1").scalar()
- def session (self):
+ def global_session (self):
if self._session is None:
Session=sessionmaker ()
self._session=Session(bind=self.engine)
+ logger.debug('alchemy.global_session created session %s'%self._session)
return self._session
- def close_session (self):
+ def close_global_session (self):
if self._session is None: return
+ logger.debug('alchemy.close_global_session %s'%self._session)
self._session.close()
self._session=None
+ # create a dbsession to be managed separately
+ def session (self):
+ Session=sessionmaker()
+ session=Session (bind=self.engine)
+ logger.debug('alchemy.session created session %s'%session)
+ return session
+
+ def close_session (self, session):
+ logger.debug('alchemy.close_session closed session %s'%session)
+ session.close()
+
####################
from sfa.util.config import Config
alchemy=Alchemy (Config())
engine=alchemy.engine
-dbsession=alchemy.session()
+global_dbsession=alchemy.global_session()