When connecting to a MySQL server from a host whose IP address
was not allowed, Connector/Python reported a handshake problem
and raised an InterfaceError exception.
(Bug #15836979)

When a username or password was passed in as Unicode to
Connector/Python, connection attempts failed with
UnicodeDecodeError exceptions due to string
concatenation of mixed-charset types. This issue affected
programs running under Python 2, and did not affect Python 3.
(Bug #14843456, Bug #67306)

Intermittent errors could occur on Windows systems:
InterfaceError(errno=2013). The cause was
incorrect handling of sock.recv() library
calls that returned less data than was requested.
(Bug #14829471, Bug #67303)

A socket error would produce a NameError
exception instead of the expected
InterfaceError, due to a misnamed variable:

NameError: global name 'e' is not defined

(Bug #14802017)

The executemany() function now supports the
pyformat parameter style. In the pyformat style, all the
substitution variables are passed in using a single dictionary
parameter, and the % format specifier is
encoded like
%(dict_key)s for a
string. MySQLCursor.executemany() can now use
both ANSI C printf and Python extended format codes.
(Bug #14754894, Bug #67146)

The error message was clarified when a non-integer value was
used for the TCP/IP port connection argument.
(Bug #13808727, Bug #64543)