mysql.connector.errors.ProgrammingError:1045(28000):用户'root'@'localhost'访问被拒绝(使用密码:YES)

问题描述 投票:0回答:5

我正在跟随讲师的代码和视频。他有这样的安排,我也完全按照这个安排。他的作品,我的没有,我不明白为什么。它被设置为用户“root”,密码为空。我尝试过 pip install mysql-connector-python 。我想保留与他相同的用户名和密码,以便更好地进行操作。我通过 Wampserver64 使用 python 和 mysql。当我尝试通过cmd运行python文件时,出现错误“mysql.connector.errors.ProgrammingError:1045(28000):用户'root'@'localhost'访问被拒绝(使用密码:YES)”。我对此很陌生,所以在我进行的过程中试图弄清楚。 (使用密码:YES)是否意味着密码匹配?以及如何获取连接 mysql 的脚本?



db = mysql.connector.connect(
    host = "localhost",
    user= "root",
    password = " "
    #database ='datarepresentation'
)
        #print ("connection made")

cursor = db.cursor()

cursor.execute("CREATE DATABASE datarepresentation")
python mysql wampserver
5个回答
0
投票

当我的朋友尝试在使用 MySQL 数据库设置的 Ubuntu Windows Linux 子系统中运行 python 脚本时,出现了同样的问题。

我们通过在 MySQL 8.0 命令行客户端中运行以下三个命令,然后重新启动计算机来重新启动所有内容来解决该问题。我们在项目中使用 Flask 而不是 Wamp,所以希望它能起到同样的作用。这些命令可以在here找到。

SELECT user, authentication_string, plugin, host FROM mysql.user;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;

根据 MySQL 文档(MySQL Documentation),它指出(使用密码:YES)仅意味着您实际上正在使用密码。如果您尝试在不使用密码的情况下登录,它会说“否”。

至于如何将脚本连接到数据库,您几乎已经掌握了。您可以编写一个查询来从数据库中检索某些内容以进行检查。这是一个使用您提到的数据库来检索某种数据并确保它在表中的示例。

cnx = mysql.connector.connect(
    host="localhost", 
    user='root', 
    password=" ", 
    database='datarepresentation')
cursor = cnx.cursor()
query = ("SELECT * FROM table-name WHERE key1 = %s")
dataName = 'randomValue'
cursor.execute(query, (dataName))
result = cursor.fetchone()
if result[0] == 1:
    return True
else:
    return False

0
投票

不要为密码参数分配任何值并传递,即密码=''


0
投票

尝试创建新用户

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

0
投票

我也遇到过并解决如下。 导入 mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  #remove this line or password="" 
)

删除密码行。如果要插入密码行,则不需要空格(例如,

password=""
,这不是
password=" "
)。

这个程序是(使用密码:YES)。 为什么我无法解决?

我认为这个错误已经表明“密码匹配”。 所以,在 mydb=mysql.connector.connect( ) 中不需要密码描述。

我已经在我的网站上指定了如何解决[故障排除]ProgrammingError: **** (*****): Access Denied for user 'root'@'localhost' (using password: YES) mysql-connector of python 。


0
投票

当我尝试将数据库连接设置凭据移至

.env
文件中并通过打印从
.env
文件中获取的内容来解决该问题时,我也遇到了类似的问题。所以基本上当在
USER=='user_name'
文件中使用
.env
时,它实际上从环境中获取用户,如官方文档统计所示:

默认情况下,load_dotenv 不会覆盖现有环境变量。 因此,它获取的是我的环境 USER,而不是我在

.env
文件中设置的环境。只需将 USER 更改为另一个变量名即可解决问题。

  • .env
USER_NAME='readonly'
USER='cannot_say'
  • conftest.py
@pytest.fixture
def connect_db():
    print(f"\nthis is USER_NAME: ", os.getenv('USER_NAME'))
    print(f"this is USER: ",  os.getenv('USER'))
  • 控制台
this is USER_NAME:  read-only
this is USER:  chihchencheng
© www.soinside.com 2019 - 2024. All rights reserved.