当前位置: 首页 > 面试题库 >

(2059,“身份验证插件'caching_sha2_password'”)在Django上运行与MYSQL数据库连接的服务器时

贲绪
2023-03-14
问题内容

我想配置django项目,以便将其与使用 Workbench 8.0 创建的 MYSQL中的 数据库连接, 然后我要通过运行来运行服务器

python manage.py runserver

从anaconda命令提示符下输入,
这样我就可以使用Django界面来可视化和更改数据。
请注意,我不想降级Workbench 8.0。

这些是我已经执行的步骤:

在anaconda提示符下:

pip install mysqlclient

在我的项目文件夹的settings.py中

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'schema_meta',
        'USER': 'root',
        'PASSWORD': '<mypassword>',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    },
}

在mysql服务器目录中,我打开cnf.ini并插入[client]部分:

[client]
database=schema_meta
host=127.0.0.1
user=root
password=<mypassword>
port=3306
default-character-set = utf8

然后从蟒蛇提示我运行

Python manage.py runserver

我得到错误

django.db.utils.OperationalError:(2059,“无法加载身份验证插件“
caching_sha2_password”:不可能通过特定模数传输。\ r \ n”)

因此,我尝试通过以下线程解决此问题:
django.db.utils.operationalError:(2059,“身份验证插件’caching_sha2_password’”)

我打开mysql工作台,然后运行以下查询:

delete from mysql.user
where user='root'
and host = '127.0.0.1';
flush privileges;
CREATE  USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '<mypassword>';

然后,在my.ini文件中,

default-authentication-plugin= caching_sha2_password

default-authentication-plugin=mysql_native_password

最后从anaconda提示符下:

python manage.py runserver

但是我又得到了

django.db.utils.OperationalError:(2059,“无法加载身份验证插件“
caching_sha2_password”:不可能通过特定模数传输。\ r \ n”)

现在,怎么了?为什么它没有将更改添加到身份验证方法中?

为了检查是否没有其他错误,从mysql工作台,从第一个“主页”视图,我右键单击数据库,打开“编辑连接”,单击“测试连接”,然后软件说连接成功。

mysql工作台说连接成功建立

此外,我想检查问题是否出在我的Django设置中。所以从anaconda提示我运行

pip install pymysql

然后在项目文件夹中创建了一个“ connect_to_mysql.py”脚本,其中包含以下代码:

import pymysql.cursors
mydb = pymysql.connect(host='127.0.0.1',
                             user='root',
                             password='<mypassword>',
                             db='schema_meta',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)
print(mydb)

自从我跑步时,这似乎工作正常

connect_to_mysql.py

从水蟒,我得到

pymysql.connections.Connection对象位于0x000002013F2851D0

我猜这意味着“连接成功建立”。
并且为了确保问题出在mysql(我猜是mysql连接器)中,我创建了一个文件“ connect_to_mysql_2.py”,其中包含以下代码:

import mysql.connector
mydb = mysql.connector.connect(user='root', password='<mypassword>',
                             host='127.0.0.1', database='meta_schema')
print(mydb)

当我从anaconda运行它时,我再次得到

“不支持身份验证插件’{0}’”。format(plugin_name))mysql.connector.errors.NotSupportedError:不支持身份验证插件’caching_sha2_password’

这意味着我无法通过使用mysql工作台和my.ini文件来解决任何问题。

如何使Django与mysql数据库连接并运行服务器?

有没有办法使用pymysql连接器代替mysql连接器来建立服务器连接器?


问题答案:

我想我解决了。

通过关注此线程

https://stackoverflow.com/a/21740692/7658051

在settings.py中的DATABASES条目中,我替换了

'ENGINE': 'django.db.backends.mysql'

'ENGINE': 'mysql.connector.django',

再次如此处指定

https://django-mysql.readthedocs.io/zh-CN/latest/checks.html#django-
mysql-w003-utf8mb4

我也加了

'OPTIONS': {
            # Tell MySQLdb to connect with 'utf8mb4' character set
            'charset': 'utf8mb4',
        },
        # Tell Django to build the test database with the 'utf8mb4' character set
        'TEST': {
            'CHARSET': 'utf8mb4',
            'COLLATION': 'utf8mb4_unicode_ci',
        }

然后如果我跑步

python manage.py运行服务器

即使我无法访问http://127.0.0.1:8000/admin,它也似乎可以正常工作,因为我已连接到旧版数据库,因此我仍然必须检查db和仍需学习的内容。

作为第二个证明,当我运行时,该连接现在正在工作

connect_to_mysql_2.py

(在Django上运行与MYSQL数据库连接的服务器时,请参阅(2059,“身份验证插件’caching_sha2_password’”))

我终于明白了

mysql.connector.connection_cext.CMySQLConnection对象位于0x000001DFB7521550

所以我真的认为这次连接已经打开。



 类似资料:
  • 问题内容: 我正在将MySQL-8.0与MySQL Workbench连接起来并出现以下错误: 无法加载身份验证插件“ caching_sha2_password”:dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so,2):找不到映像 我也尝试过使用其他客户端工具。 有什么解决办法吗? 问题答案: 已锁定 。目前,此答案的内容已解

  • 它总是导致带有错误消息的catch块 登录失败:未知的用户名或错误的密码。失败:未知的用户名或错误的密码。 我确信给定的密码是正确的。 如何使用给定的密码验证用户名?

  • 连接到服务器时出错:fatal:用户“postgres”的密码身份验证失败 fatal:用户“postgres”的密码身份验证失败

  • 我只想做一个upsert手术。我有一个JsonDocument,我有一个Couchbase服务器“123.456.789.1011”,里面有一个bucket,称为“TestBucket”。现在,当我使用端口8091的IP地址打开服务器时,它要求我输入用户名和密码,比如“uname”、“pwd”,输入后,它就打开了。我的桶没有任何密码。 这是我的代码,但问题总是在运行代码时,我会得到一个错误 Inv

  • 如何使用Ubuntu上的pgAdmin将Postgres连接到本地主机服务器?

  • 在android studio 3.1.3中,用于链接firebase身份验证的“implementation'com.google.firebase:firebase-auth:11.6.0'”和用于链接firebase数据库的“implementation'com.google.firebase:firebase-database:11.8.0'”是app level Gradle中提供的默认