我正在尝试在 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,“用户'root'@'localhost'访问被拒绝(使用密码:YES)”)以及其他潜在的重复,因为这些错误消息至少表明连接尝试附加了密码。
编辑:不分先后,我有:尝试了不同的用户, 检查连接字符串的状态紧接着 db.init_app 之前,创建了一个MySQL 的不同实例并尝试连接到它,删除了 pymysql从连接字符串,并尝试用 pdb 回溯它(没用,因为我认为我自己的唯一方法调用是 init_app())。我也在网上查了一下,发现没有提到任何人在尝试使用密码连接到数据库时收到此错误消息。我能想到的唯一剩下的可能性是当从 app.config 传递到 mysql 时(当我调用 db.init_app 时),某些内容正在更改我的字符串以删除密码。有任何想法吗?如果没有人有的话,我就只能使用 Postgresql 之类的了……
我遇到了这个问题,并通过进入 db shell 并告诉 mysql 使用 mysql_native_password 身份验证插件来验证数据库来解决它。这是一个较旧的插件,可能值得寻找一个也与 Python 的 mysql 连接驱动程序兼容的较新插件,但这是我让它工作的唯一方法。
ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password123'
在操作提供的示例中,您将替换root
for user_name
.
有关该插件的更多信息:https://dev.mysql.com/doc/refman/8.0/en/native-pluggable-authentication.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)