5252
5353from sqlalchemy import create_engine
5454from sqlalchemy .orm import sessionmaker
55+ from sqlalchemy .pool import NullPool
5556
5657from .credential import Credential
5758
@@ -62,24 +63,26 @@ class Session:
6263 """
6364
6465 migration_effective = False
66+ current_session = None
67+ uri = None
6568
6669 def __init__ (self ):
67- self .credentials = Credential ()
68- self .engine = create_engine (
69- self .credentials .get_uri (), pool_pre_ping = True , pool_recycle = 180
70- )
71- self .session = sessionmaker (autocommit = False , autoflush = False , bind = self .engine )
72-
73- self .current_session = None
70+ self .uri = Credential ().get_uri ()
7471
7572 def __enter__ (self ):
76- self .create_new_session ()
77-
78- return self .current_session
73+ return self .create_new_session ()
7974
8075 def __exit__ (self , exc_type , exc_value , traceback ):
8176 self .close ()
8277
78+ def __make_session (self ):
79+ """
80+ Provides a new session to work with.
81+ """
82+
83+ engine = create_engine (self .uri , poolclass = NullPool )
84+ return sessionmaker (autocommit = False , autoflush = False , bind = engine )
85+
8386 def query (self , * args , ** kwargs ):
8487 """
8588 Make a query.
@@ -96,15 +99,17 @@ def close(self):
9699 # pylint: disable=no-member
97100 self .current_session .close ()
98101
102+ del self .current_session
103+ self .current_session = None
104+
99105 def create_new_session (self ):
100106 """
101107 Provides a new session.
102108 """
103109
104- if self .current_session is not None :
105- self .current_session .close ()
106- self .current_session = None
110+ # Close a previous connection (if exists).
111+ self .close ()
107112
108- self .current_session = self .session ()
113+ self .current_session = self .__make_session () ()
109114
110115 return self .current_session
0 commit comments