(2059, «Плагин аутентификации« caching_sha2_password »») при запуске сервера, подключенного к базе данных MYSQL, на Django - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу настроить свой проект django, чтобы связать его с базой данных в MYSQL Я создал с верстаком 8.0 ,
и затем хочу запустить сервер, запустив

python manage.py runserver

из командной строки anaconda,
, чтобы я мог использовать интерфейс Django для визуализации и изменения данных.
Обратите внимание, что я не хочу понижать верстак 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

Затем из командной строки anaconda запускаю

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 workbench, из первого «домашнего» представления, я щелкаю правой кнопкой мыши по своей базе данных и открываю «редактировать соединение », я нажимаю« проверить соединение », и программа сообщает, что соединение установлено успешно.

mysql workbench говорит, что соединение успешно установлено

Более того, я хотелчтобы проверить, была ли проблема в моих настройках 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 

от Anaconda, я получаю

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?

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Я думаю, что решил это.

Следуя этой теме

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

В settings.py, в записи DATABASES, я подставил

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

с

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

и снова, как указано здесь,

https://django -mysql.readthedocs.io / en / latest / check.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 runserver

Itкажется, работает, даже если я не могу получить доступ к http://127.0.0.1:8000/admin, потому что я подключен к устаревшей базе данных, поэтому мне все еще приходится проверять БД и все, что мне еще предстоит изучить.

В качестве второго доказательства того, чтосоединение теперь работает, когда я запускаю

connect_to_mysql_2.py

(см. (2059, «Плагин аутентификации 'caching_sha2_password'») при запуске сервера, подключенного к базе данных MYSQL на Django )

Я наконец-то получу

mysql.connector.connection_cext.CMySQLConnection объект в 0x000001DFB7521550

Так что я действительно думаю, что это ТимСоединение включено.

0 голосов
/ 13 февраля 2019

PyMySQL добавлена ​​поддержка caching_sha2_password в 0.9.0, хотя в 0.9.1 была исправлена ​​ошибка Py2.

Также отмечено в инструкциях по установке , для caching_sha2_password существует дополнительное требование:

python3 -m pip install PyMySQL[rsa]
0 голосов
/ 12 февраля 2019

Это, вероятно, проблема не в вашем коде python, а в коннекторе python.Плагин caching_sha2_password теперь является плагином аутентификации по умолчанию, и клиенты должны поддерживать его для подключения.Итак, лучшее решение - обновить ваш Python-коннектор.Альтернативный способ - отключить этот плагин, но я этого не рекомендую, так как он снижает безопасность вашего сервера.

...