Error Keyerror 255 al ejecutar pymysql.connect

Aquí está el código

import pymysql pymysql.connect( host='localhost', port=3306, user='root', password='iDontWannaSay', db='iDontWannaShow', charset='utf8' ) 

y el error Traceback fue:

 data is :::::b'\xff\x02\x00\xff\x81\x15'....##### I was add near line 1279 which is print("data is :::::%s...."%data[i:i+6]) Traceback (most recent call last): File "C:\Users\123\Desktop\pymysqldebug.py", line 8, in  charset='utf8' File "D:\Program Files (x86)\Python\Python35\lib\site-packages\pymysql\__init__.py", line 90, in Connect return Connection(*args, **kwargs) File "D:\Program Files (x86)\Python\Python35\lib\site-packages\pymysql\connections.py", line 709, in __init__ self.connect() File "D:\Program Files (x86)\Python\Python35\lib\site-packages\pymysql\connections.py", line 934, in connect self._get_server_information() File "D:\Program Files (x86)\Python\Python35\lib\site-packages\pymysql\connections.py", line 1279, in _get_server_information self.server_charset = charset_by_id(lang).name File "D:\Program Files (x86)\Python\Python35\lib\site-packages\pymysql\charset.py", line 39, in by_id return self._by_id[id] KeyError: 255 

Parece que el método struct.unpack analiza ‘\ xff \’ a 255 y se asigna a self.server_language , sea cual sea el argumento charset no nulo pasado.

¿Es este un problema de la versión de MySQL? (Versión 8.0.1-dmr )

El problema puede ser referido a Pull Request 591.

Para ampliar la respuesta aceptada de solo enlace anterior, considere los siguientes cambios en su instalación de pymysql actual. Con MySQL 8, la API mysql-python no reconoce los conjuntos de caracteres más nuevos y, por lo tanto, el KeyError elevado.

Para resolverlo, ubique el script connectors.py bajo el módulo pymysql se encuentra en este directorio:

 print(pymysql.__file__) 

Copia de seguridad de los conectores originales.py script. Luego incorpore los siguientes cambios.

Original (líneas 1268-1269)

 self.server_language = lang self.server_charset = charset_by_id(lang).name 

Reemplazar (líneas 1268 – 1272)

 self.server_language = lang try: self.server_charset = charset_by_id(lang).name except KeyError: self.server_charset = None 

Tenga cuidado de incluir tabs ocultas en la sangría con las líneas anteriores.

Referencia

  • PyMySQL Git fix # 591

pero donde esta tu variable

 import pymysql | v myVariable = pymysql.connect( host='localhost', port=3306, user='root', password='iDontWannaSay', db='iDontWannaShow', charset='utf8' )