You are right, the problem is with the driver. I found an updated version and installing it fixed the problem. Thanks for helping resolve the problem.
I was actually making sure that the GC actually returns the connection back, and it does work as expected. However, in the code I haven't seen a __del__() being implemented in _ConnectionFairy or _CursorFairy classes so wondering how this actually works. Am I looking at the correct location of code? On Jul 9, 6:08 pm, Michael Bayer <[email protected]> wrote: > nothing known there. Try removing the pool part of the equation. > seems like your ODBC driver has issues. > > On Jul 9, 7:42 pm, Hari <[email protected]> wrote: > > > I just started trying the connection pooling and got this error when I > > was trying to see how good it can detect garbage collection. This is > > the sequence of operations I performed via iPython (on sql server via > > pyodbc): > > > -------------------------------------------------------------------------------- > > import sqlalchemy.pool > > import pyodbc > > pyodbc = sqlalchemy.pool.manage(pyodbc, pool_size=1, max_overflow=1) > > dbstring = 'DRIVER={SQL Native Client};SERVER=%s,%s;DATABASE=%s;UID= > > %s;PWD=%s' > > c = pyodbc.connect(dbstring % ("localhost", 1433, "master", > > "username", "password")) > > c = None > > import db > > import gc > > gc.collect() > > c = pyodbc.connect(dbstring % ("localhost", 1433, "master", > > "username", "password")) > > c2 = pyodbc.connect(dbstring % ("localhost", 1433, "master", > > "username", "password")) > > c = None > > c2 = None > > gc.collect() > > c = pyodbc.connect(dbstring % ("localhost", 1433, "master", > > "username", "password")) > > c2 = pyodbc.connect(dbstring % ("localhost", 1433, "master", > > "username", "password")) > > -------------------------------------------------------------------------------- > > > After the last statement, I got the below error: > > > -------------------------------------------------------------------------------- > > C:\apps\Python24\lib\site-packages\sqlalchemy\pool.pyc in connect > > (self, *args, **params) > > 907 """ > > 908 > > --> 909 return self.get_pool(*args, **params).connect() > > 910 > > 911 def dispose(self, *args, **params): > > > C:\apps\Python24\lib\site-packages\sqlalchemy\pool.pyc in connect > > (self) > > 140 def connect(self): > > 141 if not self._use_threadlocal: > > --> 142 return _ConnectionFairy(self).checkout() > > 143 > > 144 try: > > > C:\apps\Python24\lib\site-packages\sqlalchemy\pool.pyc in __init__ > > (self, pool) > > 302 self.__counter = 0 > > 303 try: > > --> 304 rec = self._connection_record = pool.get() > > 305 conn = self.connection = > > self._connection_record.get_connection() > > 306 self._connection_record.backref = weakref.ref > > (self, lambda ref:_finalize_fairy(conn, rec, pool, ref)) > > > C:\apps\Python24\lib\site-packages\sqlalchemy\pool.pyc in get(self) > > 159 > > 160 def get(self): > > --> 161 return self.do_get() > > 162 > > 163 def do_get(self): > > > C:\apps\Python24\lib\site-packages\sqlalchemy\pool.pyc in do_get(self) > > 637 > > 638 try: > > --> 639 con = self.create_connection() > > 640 self._overflow += 1 > > 641 finally: > > > C:\apps\Python24\lib\site-packages\sqlalchemy\pool.pyc in > > create_connection(self) > > 120 > > 121 def create_connection(self): > > --> 122 return _ConnectionRecord(self) > > 123 > > 124 def recreate(self): > > > C:\apps\Python24\lib\site-packages\sqlalchemy\pool.pyc in __init__ > > (self, pool) > > 196 def __init__(self, pool): > > 197 self.__pool = pool > > --> 198 self.connection = self.__connect() > > 199 self.info = {} > > 200 if pool._on_connect: > > > C:\apps\Python24\lib\site-packages\sqlalchemy\pool.pyc in __connect > > (self) > > 259 try: > > 260 self.starttime = time.time() > > --> 261 connection = self.__pool._creator() > > 262 if self.__pool._should_log_info: > > 263 self.__pool.log("Created new connection %r" % > > connection) > > > C:\apps\Python24\lib\site-packages\sqlalchemy\pool.pyc in <lambda>() > > 886 try: > > 887 if key not in self.pools: > > --> 888 pool = self.poolclass(lambda: > > self.module.connect(*args, **params), **self.params) > > 889 self.pools[key] = pool > > 890 return pool > > > Error: ('IM006', "[IM006] [Microsoft][ODBC Driver Manager] Driver's > > SQLSetConnectAttr failed (0); [01000] [Microsoft][SQL Native Client] > > [SQL Server]Changed database context to 'dsmaster'. (5701); [01000] > > [Microsoft][SQL Native Client][SQL Server]Changed language setting to > > us_english. (5703)") > > -------------------------------------------------------------------------------- > > > Is this a known problem with the pool or something is wrong with the > > usage? Thank you. > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---
