Я тоже столкнулся с похожей проблемой. Дело в том, что если Вы перенесёте действия с курсором наверх, вот так
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