Задать вопрос
@drqqv

Ошибка с работой MySQL. Как решить?

Выдает ошибку:
raise errors.OperationalError("MySQL Connection not available.")
mysql.connector.errors.OperationalError: MySQL Connection not available.


Код:
from getpass import getpass
from mysql.connector import connect, Error

try:
    with connect(
            host="localhost",
            user="root",
            password="Current-Root-Password",
            database="valen_bot"
    ) as connection:
        print(connection)
except Error as e:
    print(e)


show_table_query = "valen_info"
with connection.cursor() as cursor:
    cursor.execute(show_table_query)
    # Fetch rows from last executed query
    result = cursor.fetchall()
    for row in result:
        print(row)
  • Вопрос задан
  • 657 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Hanneman
Ну кто его знает - вы же подробностей не приводите. Может, у вас отсутствует MySQL на localhost. Может и так, что используется Current-Root-Password как пароль, а вы не замечаете. А может, доступ к базе запрещен с паролем с localhost (что маловероятно, но всё же). Что такое "valen_info" вообще - откуда этот код копировали вообще?
Ответ написан
Комментировать
alekseev_ap
@alekseev_ap
Свободный разработчик
Я тоже столкнулся с похожей проблемой. Дело в том, что если Вы перенесёте действия с курсором наверх, вот так

from getpass import getpass
from mysql.connector import connect, Error

try:
    with connect(
            host="localhost",
            user="root",
            password="Current-Root-Password",
            database="valen_bot"
    ) as connection:
        print(connection)
        show_table_query = "valen_info"
        with connection.cursor() as cursor:
            cursor.execute(show_table_query)
            # Fetch rows from last executed query
            result = cursor.fetchall()
            for row in result:
                print(row)
except Error as e:
    print(e)


то, всё заработает. По-моему мнению внутри первого with теряется подключение к базе данных - отсюда сообщение об ошибке. Продемонстрирую это немного модифицировав исходный код:

from getpass import getpass
from mysql.connector import connect, Error

try:
    with connect(
            host="localhost",
            user="root",
            password="Current-Root-Password",
            database="valen_bot"
    ) as connection:
        print(connection)
        # Добавил для демонстрации
        print(connection.is_connected())
except Error as e:
    print(e)

# Добавил для демонстрации
print(connection)
print(connection.is_connected())


Вы получите и в первом и во втором случае адрес объекта connection, но, помимо этого, в первом случае вызов метода is_connected() даст True, а во втором - False!

<mysql.connector.connection_cext.CMySQLConnection object at 0x0000027D87CC9FD0>
True
<mysql.connector.connection_cext.CMySQLConnection object at 0x0000027D87CC9FD0>
False
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы