用户 root@localhost 的 mysql 访问被拒绝(使用密码 : NO) despite having set a password and entered it in connection uri

标签 mysql flask sqlalchemy flask-sqlalchemy pymysql

我正在尝试在 Flask 应用程序中使用 pymysql 和 Flask-sqlalchemy 配置 mysql 数据库。

db = SQLAlchemy()
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost:3306/ftm'
db.init_app(app)

但是,当我运行我的应用程序时,我得到:

OperationalError: (pymysql.err.OperationalError) (1045, u"Access denied for user 'root'@'localhost' (using password: NO)")

我尝试重置密码,并验证它有效:从命令行,我可以通过写入进入mysql:

mysql -u root -p

然后在提示符下输入我的密码。有没有人知道为什么 mysql 似乎认为我在尝试不使用密码进行连接,即使我在 URI 中有一个(有效的)密码?

请注意,这是与 mysql_exceptions.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)") 不同的问题和其他潜在的重复项,因为这些错误消息至少表明连接尝试附加了密码。

编辑:没有特别的顺序,我有:尝试不同的用户检查连接字符串的状态紧接在 db.init_app 之前,创建了一个 MySQL 的不同实例 并尝试连接到它,从连接字符串中删除了 pymysql,并尝试用 pdb 回溯它(没用,因为唯一的方法调用我承认我自己的是 init_app())。我还搜索了互联网,发现没有提到任何人在尝试使用密码连接到数据库时收到此错误消息。我能想到的唯一剩下的可能性是虽然从 app.config 传递到 mysql(当我调用 db.init_app 时)某些东西正在更改我的字符串以删除密码。 有什么想法吗?如果没有人有,我只好去使用 Postgre 或其他东西......

最佳答案

我遇到了这个问题并通过进入 db shell 并告诉 mysql 使用 mysql_native_password 身份验证插件来验证您的数据库来解决它。这是一个较旧的插件,可能值得寻找一个也与 Python 的 mysql 连接驱动程序兼容的新插件,但这是我让它工作的唯一方法。

更改用户 'user_name'@'localhost' 通过 'password123' 识别 mysql_native_password

在 op 提供的示例中,您可以将 root 替换为 user_name

关于插件的更多信息:https://dev.mysql.com/doc/refman/8.0/en/native-pluggable-authentication.html

关于用户 root@localhost 的 mysql 访问被拒绝(使用密码 : NO) despite having set a password and entered it in connection uri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439829/

相关文章:

SQLAlchemy:为列的每个不同值选择一行

mysql - 包含 group_concat、GROUP BY 和空值的每月值

python - Django MySQL Join 以提高性能

python - 为什么 PYTHON 中的 SQL 查询中的删除不会提交数据库中的更改?

javascript - 在外部 javascript 文件中使用 Jinja2 模板引擎

python - AttributeError : 'IntegrityError' object has no attribute 'message' SQLAlchemy

python - 如何仅将 SQLAlchemy 记录器输出到文件

mysql - 加快 MySql 中的查询执行速度

mysql在单个表中的行之间返回TIMEDIFF

python - 你如何在 Appengine 上使用 xlrd 读取 excel 文件