Hari wrote:
>
> 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?

it doesn't use __del__ which interferes with gc and also presents "self"
in a non-deterministic state.  a remote weakref with a callback is used to
finalize connection resources back into the pool.



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