diff --git a/IzzyLib/database.py b/IzzyLib/database.py index a71f00f..0624b69 100644 --- a/IzzyLib/database.py +++ b/IzzyLib/database.py @@ -6,7 +6,7 @@ from sqlalchemy import create_engine, ForeignKey, MetaData, Table from sqlalchemy import Column as SqlColumn, types as Types #from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.exc import OperationalError, ProgrammingError -from sqlalchemy.orm import sessionmaker +from sqlalchemy.orm import scoped_session, sessionmaker from . import logging from .cache import LRUCache @@ -27,6 +27,7 @@ class DataBase(): session_class = kwargs.get('session_class', Session) self.session = lambda trans=True: session_class(self, trans) + self.sessions = {} self.SetupCache() @@ -109,7 +110,7 @@ class Session(object): def __init__(self, db, trans=True): self.db = db self.classes = self.db.classes - self.session = sessionmaker(bind=db.db)() + self.session = scoped_session(sessionmaker(bind=db.db))() self.table = self.db.table self.cache = self.db.cache self.trans = trans @@ -121,6 +122,7 @@ class Session(object): self.rollback = self.s.rollback self.query = self.s.query self.execute = self.s.execute + self.close = self.s.close self._setup() @@ -130,6 +132,7 @@ class Session(object): def __enter__(self): self.sessionid = RandomGen(10) + self.db.sessions[self.sessionid] = self return self @@ -137,8 +140,9 @@ class Session(object): if tb: self.rollback() - else: - self.commit() + self.commit() + self.close() + del self.db.sessions[self.sessionid] def _setup(self):