django更换默认数据库sqlite3为pymsql后出现Keyerror:255的解决办法----升级PyMySQL

一、更换数据库的办法:

1、安装PyMySQL

2、修改project目录同名文件下的settings.py:DATABASES = {

    'default': {
# 'ENGINE': 'django.db.backends.sqlite3', 默认的
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),默认的
'ENGINE': 'django.db.backends.mysql',
'NAME': 'hello_django_db',
'USER': 'root',
'PASSWORD': '1234',
'HOST': 'localhost',
'PORT': '3306',
}
}
3、在该目录下打开__init__.py文件,添加以下语句:
 
import pymysql
  
pymysql.install_as_MySQLdb()

然后运行 manage.py runserver,发现出现keyerro:255的错误;网上搜索,找到解决办法:

二、解决
keyerro:255
主要原因是MySQL8.0更新了很多字符集,但是这些字符集长度超过255了,所以旧版的PyMySQL不支持长度超过255的字符 

导致上述问题的主要原因是KeyError: 255这个错误:


Traceback (most recent call last):
  ...
  File "C:Program FilesPython36libsite-packagespymysql\__init__.py", line 90, in Connect
    return Connection(*args, **kwargs)
  File "C:Program FilesPython36libsite-packagespymysqlconnections.py", line 706, in __init__
    self.connect()
  File "C:Program FilesPython36libsite-packagespymysqlconnections.py", line 931, in connect
    self._get_server_information()
  File "C:Program FilesPython36libsite-packagespymysqlconnections.py", line 1269, in _get_server_information
    self.server_charset = charset_by_id(lang).name
  File "C:Program FilesPython36libsite-packagespymysqlcharset.py", line 38, in by_id
    return self._by_id[id]
KeyError: 255

主要原因是MySQL8.0更新了很多字符集,但是这些字符集长度超过255了,所以旧版的PyMySQL不支持长度超过255的字符 
查看当前版本的PyMySQL:


> pip list
Package                Version
---------------------- -----------
PyMySQL                0.7.11

更新PyMySQL为最新版,问题解决。



 
明月装饰了你的窗子,你装饰了他的梦。
原文地址:https://www.cnblogs.com/zkkysqs/p/9192160.html