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.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):
|
||||
|
|
Loading…
Reference in a new issue