(Python) Проблемы с аутентификацией базы данных MySQL

0

Я пытаюсь запустить код ниже, чтобы добавить компоненты переменной символов в базу данных, называемую ценным_знаком. Ранее я задавал этот вопрос и исправлял значительное количество ошибок, однако, я все еще получаю следующую ошибку:

Traceback (most recent call last):

 File "C:/Users/Nathan/.PyCharmCE2018.1/config/scratches/scratch.py", line 28, in <module>
insert_btc_symbols(symbols)
 File "C:/Users/Nathan/.PyCharmCE2018.1/config/scratches/scratch.py", line 15, in insert_btc_symbols
con = MySQLdb.connect(host=db_host,user=db_user,db=db_name) #,passwd=db_pass
 File "C:\Python27\lib\site-packages\MySQLdb\__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
 File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 193, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (1251, 'Client does not support authentication protocol requested by server; consider upgrading MySQL client')

Process finished with exit code 1

Я пробовал подключиться как к пользователю, у которого нет пароля, так и через пользователя root вместе с открытым ключом для пароля, и это безуспешно. Ниже приведен код, который я выполняю:

import datetime
import MySQLdb
from math import ceil

def obtain_btc():
    now = datetime.datetime.utcnow()
    symbols = ['BTC', 'Crypto', 'Bitcoin', 'No Sector', 'USD', now, now]
    return symbols

def insert_btc_symbols(symbols):
    db_host = 'localhost'
    db_user = 'natrob2'
    #db_pass = ''
    db_name = 'securities_master'
    con = MySQLdb.connect(host=db_host,user=db_user,db=db_name) #,passwd=db_pass
    column_str = "ticker, instrument, name, sector, currency, created_date, last_updated_date"
    insert_str = (("%s, ")*7)[:2]
    final_str = ("INSERT INTO symbol (%s) VALUES (%s)" % (column_str,insert_str))
    print (final_str,len(symbols))

    with con:
        cur = con.cursor()
        for i in range(0,int(ceil(len(symbols)/100.0))):
            cur.executemany(final_str,symbols[i*100:(i+1)*100-1])

if __name__ == "__main__":
    symbols = obtain_btc()
    insert_btc_symbols(symbols)
Теги:
database
connection

1 ответ

0
Лучший ответ

Похоже, что клиентский протокол проверки подлинности конечных точек не является встроенным с сервером. не могли бы вы попробовать следующие шаги? https://dev.mysql.com/doc/refman/5.5/en/old-client.html

См. Соответствующий клиент проблемы не поддерживает протокол проверки подлинности, запрошенный сервером, рассматривает возможность обновления клиента mysql

  • 0
    Я попробовал ваше предложение использовать функцию OLD_PASSWORD () для сброса моего пароля на один совместимый, но встретил синтаксическую ошибку, говорящую мне проверить синтаксис в руководстве для моей версии. Оказывается, что OLD_PASSWORD () был удален для MySQL 8.0…. dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html
  • 1
    В итоге я заставил его работать, используя команду: ALTER USER 'root' @ 'localhost', ИДЕНТИФИЦИРОВАНЫ С mysql_native_password BY 'password' Ваш ответ помог мне привести меня на правильный путь, поэтому спасибо.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню