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
-~----------~----~----~----~------~----~------~--~---

Reply via email to