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