Django 连接 Mysql (8.0.16) 失败

首先,确认数据库配置正确无误:

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,  # or use: mysql.connector.django
        ‘NAME‘: ‘TestDB‘,
        ‘USER‘: ‘Guest‘,
        ‘PASSWORD‘: ‘admin‘,
        ‘HOST‘: ‘192.168.218.199‘,
        ‘PORT‘: ‘3306‘,
    }
}

但是启动项目时仍然出现如下错误:

System check identified no issues (0 silenced).
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection
    self.connect()
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\backends\base\base.py", line 195, in connect
    self.connection = self.get_new_connection(conn_params)
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\backends\mysql\base.py", line 227, in get_new_connection
    return Database.connect(**conn_params)
  File "C:\Program Files (x86)\Python\Python37-32\lib\site-packages\MySQLdb\__init__.py", line 84, in Connect
    return Connection(*args, **kwargs)
  File "C:\Program Files (x86)\Python\Python37-32\lib\site-packages\MySQLdb\connections.py", line 164, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
MySQLdb._exceptions.OperationalError: (2059, <NULL>)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Python\Python37-32\lib\threading.py", line 917, in _bootstrap_inner
    self.run()
  File "C:\Program Files (x86)\Python\Python37-32\lib\threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\utils\autoreload.py", line 54, in wrapper
    fn(*args, **kwargs)
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\core\management\commands\runserver.py", line 120, in inner_run
    self.check_migrations()
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\core\management\base.py", line 453, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\migrations\executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\migrations\loader.py", line 49, in __init__
    self.build_graph()
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\migrations\loader.py", line 212, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\migrations\recorder.py", line 73, in applied_migrations
    if self.has_table():
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\migrations\recorder.py", line 56, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\backends\base\base.py", line 256, in cursor
    return self._cursor()
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\backends\base\base.py", line 233, in _cursor
    self.ensure_connection()
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection
    self.connect()
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection
    self.connect()
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\backends\base\base.py", line 195, in connect
    self.connection = self.get_new_connection(conn_params)
  File "G:\Projects\Python\WebTest\venv\lib\site-packages\django\db\backends\mysql\base.py", line 227, in get_new_connection
    return Database.connect(**conn_params)
  File "C:\Program Files (x86)\Python\Python37-32\lib\site-packages\MySQLdb\__init__.py", line 84, in Connect
    return Connection(*args, **kwargs)
  File "C:\Program Files (x86)\Python\Python37-32\lib\site-packages\MySQLdb\connections.py", line 164, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
django.db.utils.OperationalError: (2059, <NULL>)

原因:Django 对Mysql 8.0 版本的默认密码加密方式不支持

解决方法:修改密码加密方式。

首先做查询操作看一下plugin:

use mysql;
select user,plugin from user;

结果如下:

Mysql 官方原文:

In MySQL 8.0, caching_sha2_password is the default authentication plugin rather than mysql_native_password.

链接:https://dev.mysql.com/doc/refman/8.0/en/sha256-pluggable-authentication.html

但是Django对caching_sha2_password不支持

所以我们下一步就是对其进行修改:

alter user ‘Guest‘@‘%‘ identified with mysql_native_password by ‘admin‘;

此时已经修改成功,我们再次查询看一下结果:

重新开启Django项目已经可以正常连接。

原文地址:https://www.cnblogs.com/zoneofmine/p/10801192.html

时间: 2024-10-08 18:53:29

Django 连接 Mysql (8.0.16) 失败的相关文章

Django链接Mysql 8.0 出现错误(1045:Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: NO) 的一种解决方法

运行环境: Django版本2.0 ; Mysql 版本 8.0.11; 错误代码:  django.db.utils.OperationalError: (1045:Access denied for user 'root'@'localhost' (using password: NO) 这个错误看网上的说法基本都是由于 数据库的 用户名 和 密码 不正确导致的 ,下面是我在Django Setting.py里的设置: ``` DATABASES = { 'default': { 'ENGI

MAC下安装MySQL 8.0.16教训记录

问题 花了两天多时间才算解决问题!原来也在几个环境下使用过MySQL,而且也熟悉另外几个关系数据库,原以为也就是安装时间上花费一点.但是,现在总结来看,对于MAC下知识了解还是太少,导致走了不少弯路.现记录于此,有兴趣的朋友参考一下. 我使用的是从Oracle官方网站上下载目前最新的mysql-8.0.16-macos10.14-x86_64.dmg安装方式.一开始的安装过程没有问题,与其他.dmg文件的安装方式大同小异. 但是,安装结束后,在MAC终端上运行如下命令出错: mysql -uro

django连接mysql

这个问题已经出现了数次.每次带新人,会问,带老司机也会问.上周末,牛小妹也在问.今天早上,我就把这个操作过程总结下. 修改数据库连接 首先,在settings.py文件中,是不是有下图这么一段内容: 建立django工程的时候是自动创建的.这个是告诉你,django默认连接sqllite.ENGINE:是指连接数据库驱动的名称,NAME是指要连接什么库,什么文件.实际上,ENGINE有以下几种情况: django.db.backends.postgresql 连接 PostgreSQL djan

Linux 6.7 安装 MySQL 8.0.16

操作系统: 2.6.32-754.10.1.el6.x86_64 MySQL版本:8.0.16 下载地址:https://dev.mysql.com/downloads/ 安装方法: 使用rpm安装 [[email protected]]# cd /opt/*******/data [[email protected]]# mkdir mysql [[email protected]]# tar xvf /var/tmp/mysql-8.0.16-1.el6.x86_64.rpm-bundle.

Navicat 连接MySQL 8.0.11 出现2059错误

错误 使用Navicat Premium 连接MySQL时出现如下错误: 原因 mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password 解决 更改加密规则: mysql -uroot -ppassword #登录 use mysql; #选择数据库 ALTER USER 'root'@'localhost' IDENTIFIED BY 'sa' PASSWORD EXPIRE NEVER; #更改

(转)Navicat 连接MySQL 8.0.11 出现2059错误

错误 使用Navicat Premium 连接MySQL时出现如下错误: 原因 mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password 解决 更改加密规则: mysql -uroot -ppassword #登录 use mysql; #选择数据库 # 远程连接请将'localhost'换成'%' ALTER USER 'root'@'localhost' IDENTIFIED BY 'passw

Navicat 连接Mysql 8.0以上版本报错1251的详细解决方案

从MySql5.7版本跳到了Mysql 8.0的版本,安装的时候提示链接加密方式已经改变 解决办法: 更改加密方式: 1.以root账户用户登录Mysql: mysql -u root -p 2.更改加密方式: ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 3.更改密码: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native

Django连接MySQL数据库

1.修改settings.py 配置数据属性 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'fruitdb', 'USER': 'root', 'PASSWORD':'hellosandy', } } 修改完后进入终端进入项目目录下执行python manage.py shell命令启动交互界面输入一下代码验证数据库配置是否成功.没报错则成功! >>> from django.db im

python之路-----web应用的创建(python3.4下,django连接mysql)

参考网址: https://github.com/PyMySQL/PyMySQL/ django框架中的一个网站可以包含多个django项目,而一个django项目则包含一组特定的对象,这些对象包括URL的设计.数据库的设计以及其他的一些选项设置. django-admin.py-----它有许多的命令选项,可以通过这些选项来操作项目.其中使用startproject命令选项,可以生成一个项目名的目录,它包括一个基本web应用所需要的文件结构: __init__.py:空文件,主要用来告诉pyt