On Aug 25, 2010, at 11:09 PM, Warwick Prince wrote:

> HI Michael
> 
> Excellent.  Thanks for the pointers - I'll investigate further and get back 
> to you.  This is really strange as I do not believe that I changed anything 
> from the point it all worked, to the point at which it didn't!   (I'm sure 
> there will be something however - there always is..).  :-)   I'll let you 
> know how I go.   When I get it going again, I'll hit you with the REAL 
> questions I have..  

those connection issues are fixed in tip (not your MySQL problem, though).


> 
> Cheers
> Warwick
> 
> On 26/08/2010, at 12:43 PM, Michael Bayer wrote:
> 
>> 
>> On Aug 25, 2010, at 10:11 PM, Warwick Prince wrote:
>> 
>>> Hi All
>>> 
>>> This is my first post here, so I wish it were a little more spectacular..  
>>> :-)
>>> 
>>> I have been working happily with SA 0.6.x on Windows 2003 server with MySQL 
>>> and the Sun Python Connector.  I have an identical config running (and 
>>> working) on XP.
>>> 
>>> I was testing my code which had been working perfectly, and suddenly 
>>> started getting this message which I had never seen before;
>>> 
>>> Traceback (most recent call last):
>>> File "<pyshell#3>", line 1, in <module>
>>>  e.connect()
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\base.py", line 1731, 
>>> in connect
>>>  return self.Connection(self, **kwargs)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\base.py", line 821, 
>>> in __init__
>>>  self.__connection = connection or engine.raw_connection()
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\base.py", line 1787, 
>>> in raw_connection
>>>  return self.pool.unique_connection()
>>> File "C:\Python26\lib\site-packages\sqlalchemy\pool.py", line 135, in 
>>> unique_connection
>>>  return _ConnectionFairy(self).checkout()
>>> File "C:\Python26\lib\site-packages\sqlalchemy\pool.py", line 329, in 
>>> __init__
>>>  rec = self._connection_record = pool.get()
>>> File "C:\Python26\lib\site-packages\sqlalchemy\pool.py", line 177, in get
>>>  return self.do_get()
>>> File "C:\Python26\lib\site-packages\sqlalchemy\pool.py", line 692, in do_get
>>>  con = self.create_connection()
>>> File "C:\Python26\lib\site-packages\sqlalchemy\pool.py", line 138, in 
>>> create_connection
>>>  return _ConnectionRecord(self)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\pool.py", line 218, in 
>>> __init__
>>>  l.first_connect(self.connection, self)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\strategies.py", line 
>>> 145, in first_connect
>>>  dialect.initialize(c)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\dialects\mysql\base.py", 
>>> line 1774, in initialize
>>>  default.DefaultDialect.initialize(self, connection)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\default.py", line 
>>> 144, in initialize
>>>  self._get_default_schema_name(connection)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\dialects\mysql\base.py", 
>>> line 1739, in _get_default_schema_name
>>>  return connection.execute('SELECT DATABASE()').scalar()
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\base.py", line 1157, 
>>> in execute
>>>  params)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\base.py", line 1252, 
>>> in _execute_text
>>>  parameters=parameters)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\base.py", line 1348, 
>>> in __create_execution_context
>>>  None, None)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\base.py", line 1311, 
>>> in _handle_dbapi_exception
>>>  self.invalidate(e)
>>> File "C:\Python26\lib\site-packages\sqlalchemy\engine\base.py", line 961, 
>>> in invalidate
>>>  if self.__connection.is_valid:
>>> AttributeError: 'MySQL' object has no attribute 'is_valid'
>>> 
>>> I have spent a significant amount of time on this, and nothing makes sense. 
>>>  I've run the unittest.py code that comes with the connector, and 
>>> (connecting to the same DB) ran the tests with success.  Firstly, it would 
>>> appear that there is a possible bug in base.py at line 962 where it asks " 
>>> if self.__connection.is_valid:" as this attribute has not been created yet, 
>>> and is conditionally created.  
>> 
>> __connection is created in the constructor, and it may get del'ed by close 
>> or invalidate.   There's a check for closed right there, so its only if 
>> invalidate() is called twice that there'd be an issue.  But that's not 
>> what's happening here, since __connection is present.
>> 
>> Its still a bug on our part though, partially, there's an edge case where 
>> the __connection member is not the usual ConnectionFairy wrapper we use, and 
>> is the raw DBAPI connection, and that is during the initilization phase of a 
>> new connection.   In your stack trace, a new connection is acquired from the 
>> DBAPI, and we're calling "SELECT DATABASE()" on it.  That is failing.   Very 
>> unusually, it is failing with an exception that passes the "is_disconnect" 
>> test, which means the errno is in (2006, 2013, 2014, 2045, 2055, 2048) 
>> according to the mysqlconnector dialect, and means the connection has been 
>> lost.  Interestingly, that is one more code than we have in base.py.  So 
>> that list of codes is suspect (the myconnpy guys provided some of this code) 
>> - the base list used by the other MySQL dialects is (2006, 2013, 2014, 2045, 
>> 2055).
>> 
>> The exception then passes off to invalidate() which wasn't expecting a raw 
>> DBAPI connection and it breaks.  Ticket #1894 is added.
>> 
>> For the immediate issue you'd need to figure out what error SELECT 
>> DATABASE() is returning.
>> 
>> 
>> 
>> 
>>> However, this is not the root of the issue, merely a distraction.  (I 
>>> forced this to exist and have a value, but the problem just fell through to 
>>> further down the code)
>>> 
>>> I can get this error by simply doing this (now) when this all has worked 
>>> for days.
>>> 
>>> e = create_engine('mysql+mysqlconnector://user:passw...@127.0.0.1/testdb', 
>>> encoding='utf8', echo=False)
>>> e.connect()
>>> 
>>> Any clues - as this is driving me nuts!   Can't do ANYTHING now because I 
>>> an no longer connect to the DB.  DB manager and other tools all show MySQL 
>>> happily ticking along.  I have rebooted the server.
>>> 
>>> As a possible solution, are there any other stable MySQL connectors out 
>>> there that are easy to install on a Windows platform?   The Python 
>>> Connector one chosen has been good so far, but if that turns out to be  the 
>>> issue - it's gone!
>>> 
>>> Cheers
>>> Warwick
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "sqlalchemy" group.
>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>> To unsubscribe from this group, send email to 
>>> sqlalchemy+unsubscr...@googlegroups.com.
>>> For more options, visit this group at 
>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "sqlalchemy" group.
>> To post to this group, send email to sqlalch...@googlegroups.com.
>> To unsubscribe from this group, send email to 
>> sqlalchemy+unsubscr...@googlegroups.com.
>> For more options, visit this group at 
>> http://groups.google.com/group/sqlalchemy?hl=en.
>> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to