我正在尝试遵循Flask-SQLAlchemy快速入门指南(http://flask-sqlalchemy.pocoo.org/2.3/quickstart/)。当我执行任何数据库操作(例如db.create_all()
时,都会收到错误sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded: The specified module could not be found.\r\n")
我知道这是由于MySQL8中的默认标识方法已更改。我打开了一个mysqlshell并运行了这些-
CREATE USER 'myapp'@'localhost' IDENTIFIES WITH mysql_native_password BY 'password';
GRANT ALL PRIVILEGES ON *.* 'myapp'@'localhost';
似乎一切正常。但是,即使在更新配置详细信息以将此新用户用于
app = Flask(__name__,static_url_path='')
app.config['SQLALCHEMY_DATABASE_URI']='mysql:////myapp:password@localhost/mydatabase'
db = SQLAlchemy(app)
相同的错误仍然存在。有什么想法吗?
答案 0 :(得分:0)
这不是“解决方案”,但是对于不幸的Google员工来说,这就是我所做的- 为了使用MySQL的官方python连接器,我卸载了python 3.7并恢复为python 3.6。我安装了pymysql,并将配置中的URI更改为mysql + pymysql://等。这似乎使我有了一个可以运行的应用程序。
答案 1 :(得分:0)
尝试一下:
app.config['SQLALCHEMY_DATABASE_URI']='mysql:////myapp:password@localhost/mydatabase?auth_plugin=mysql_native_password'
http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.engine.url.URL.params.query
答案 2 :(得分:0)
我通过在URL中使用 pymysql
方言解决了该问题:
<代码> mysql + pymysql:// root:root @ localhost:3306 / database