尽管已设置密码并在连接 uri 中输入,但用户 root@localhost 的 mysql 访问被拒绝(使用密码:否)

Tob*_*eed 2 mysql sqlalchemy flask 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)
Run Code Online (Sandbox Code Playgroud)

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

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

我尝试重置密码,并验证它是否有效:从命令行,我可以通过以下方式输入 mysql:

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

然后在提示下输入我的密码。有没有人知道为什么 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 或其他什么......

Bra*_*olt 8

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

ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password123'

在通过你会替代运算提供的示例root进行user_name

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


pau*_*sm4 1

好吧,这里有几个潜在的问题。例如:

  1. 也许您的“连接”语法没有发送密码(就像您认为的那样)

  2. 也许您的“用户”(例如“root”)和“主机”(例如“localhost”)的组合在mySQL中的定义方式并不完全符合您的想法。

  3. 也许用户和主机的组合并没有完全按照您想象的方式从 app.config 传递到 mysql。

建议:

  1. 看这里:

  2. 考虑更改“mysql+pymysql”并看看会发生什么。

  3. 考虑定义一个不同的用户(无论如何“root”可能是一个坏主意)并看看会发生什么。

  4. 添加“printf's”(或 Alchemy 等效项)和/或打开跟踪。

本教程也可能有帮助: