django和mysql8.0的坑

更推荐使用mysqlclient ,pymysql更简单易用,但性能不如mysqlclient

使用mysqlclient

pip install mysqlclient
出错,找不到对应版本
ERROR: No matching distribution found for mysql-client
解决办法:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
下载对应版本,下载到本地后,到对应的文件目录下执行安装如:
pip install mysqlclient-1.3.13-cp36-cp36m-win_amd64.whl
出错:django.db.utils.OperationalError: (2059, )
问题所在:主要就是mysql8.0的问题。
目前最新的mysql8.0对用户密码的加密方式为caching_sha2_password,
django暂时还不支持这种新增的加密方式。只需要将用户加密方式改为老的加密方式即可。
解决方案:
以下命令是在cmd窗口下完成的。
1.登录mysql,连接用户为root。
> mysql -u root -p
2.执行命令查看加密方式
> use mysql;
> select user,plugin from user where user='root';
3.执行命令修改加密方式
> alter user 'root'@'localhost' identified with mysql_native_password by 'yourpassword'
4.属性权限使配置生效
> flush privileges
重设mysql8.0的加密方式后,再次启动django服务器就没有任何问题了。

使用pymysql

pip install pymysql
__init__.py文件中
import pymysql
pymysql.install_as_MySQLdb()
由于MySQL版本问题会出现报错:
mysqlclient和pymysqlRuntimeError: cryptography is required for sha256_password or caching_sha2_password
解决办法:
pip install cryptography
继续运行出现报错:
django.db.utils.InternalError: (1193, "Unknown system variable 'storage_engine'")
解决办法:
修改settings.pyDATABASES配置项为:
'OPTIONS': {'init_command':'SET default_storage_engine=INNODB;'}

你可能感兴趣的:(django和mysql8.0的坑)