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:[email protected]/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 [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.
>>>
>>
>> --
>> 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.
>>
>
> --
> 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.
>
--
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.