database: add session tracking
This commit is contained in:
parent
1dc8d9162f
commit
3887a68db9
|
@ -6,7 +6,7 @@ from sqlalchemy import create_engine, ForeignKey, MetaData, Table
|
||||||
from sqlalchemy import Column as SqlColumn, types as Types
|
from sqlalchemy import Column as SqlColumn, types as Types
|
||||||
#from sqlalchemy.ext.declarative import declarative_base
|
#from sqlalchemy.ext.declarative import declarative_base
|
||||||
from sqlalchemy.exc import OperationalError, ProgrammingError
|
from sqlalchemy.exc import OperationalError, ProgrammingError
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import scoped_session, sessionmaker
|
||||||
|
|
||||||
from . import logging
|
from . import logging
|
||||||
from .cache import LRUCache
|
from .cache import LRUCache
|
||||||
|
@ -27,6 +27,7 @@ class DataBase():
|
||||||
|
|
||||||
session_class = kwargs.get('session_class', Session)
|
session_class = kwargs.get('session_class', Session)
|
||||||
self.session = lambda trans=True: session_class(self, trans)
|
self.session = lambda trans=True: session_class(self, trans)
|
||||||
|
self.sessions = {}
|
||||||
|
|
||||||
self.SetupCache()
|
self.SetupCache()
|
||||||
|
|
||||||
|
@ -109,7 +110,7 @@ class Session(object):
|
||||||
def __init__(self, db, trans=True):
|
def __init__(self, db, trans=True):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.classes = self.db.classes
|
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.table = self.db.table
|
||||||
self.cache = self.db.cache
|
self.cache = self.db.cache
|
||||||
self.trans = trans
|
self.trans = trans
|
||||||
|
@ -121,6 +122,7 @@ class Session(object):
|
||||||
self.rollback = self.s.rollback
|
self.rollback = self.s.rollback
|
||||||
self.query = self.s.query
|
self.query = self.s.query
|
||||||
self.execute = self.s.execute
|
self.execute = self.s.execute
|
||||||
|
self.close = self.s.close
|
||||||
|
|
||||||
self._setup()
|
self._setup()
|
||||||
|
|
||||||
|
@ -130,6 +132,7 @@ class Session(object):
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
self.sessionid = RandomGen(10)
|
self.sessionid = RandomGen(10)
|
||||||
|
self.db.sessions[self.sessionid] = self
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
@ -137,8 +140,9 @@ class Session(object):
|
||||||
if tb:
|
if tb:
|
||||||
self.rollback()
|
self.rollback()
|
||||||
|
|
||||||
else:
|
|
||||||
self.commit()
|
self.commit()
|
||||||
|
self.close()
|
||||||
|
del self.db.sessions[self.sessionid]
|
||||||
|
|
||||||
|
|
||||||
def _setup(self):
|
def _setup(self):
|
||||||
|
|
Loading…
Reference in a new issue