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 或其他什么......
我遇到了这个问题,并通过进入 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
好吧,这里有几个潜在的问题。例如:
也许您的“连接”语法没有发送密码(就像您认为的那样)
也许您的“用户”(例如“root”)和“主机”(例如“localhost”)的组合在mySQL中的定义方式并不完全符合您的想法。
也许用户和主机的组合并没有完全按照您想象的方式从 app.config 传递到 mysql。
建议:
看这里:
考虑更改“mysql+pymysql”并看看会发生什么。
考虑定义一个不同的用户(无论如何“root”可能是一个坏主意)并看看会发生什么。
添加“printf's”(或 Alchemy 等效项)和/或打开跟踪。
本教程也可能有帮助:
| 归档时间: |
|
| 查看次数: |
10528 次 |
| 最近记录: |