Flask连接MySQL数据库报错求助:caching_sha2_password不被支持
我是Flask框架的新手,最近尝试连接MySQL数据库时遇到了问题。我的__init__.py代码如下:
app = Flask(__name__) app.config.from_object(Config) db = SQLAlchemy(app) migrate = Migrate(app, db)
运行后出现了以下错误:
Authentication plugin '{0}' is not supported".format(plugin_name)) sqlalchemy.exc.NotSupportedError: (mysql.connector.errors.NotSupportedError) Authentication plugin 'caching_sha2_password' is not supported
解决方案1:修改MySQL用户的认证方式
MySQL 8.0及以上版本默认使用caching_sha2_password作为认证插件,但很多旧版本的数据库驱动不支持它。你可以把目标用户的认证方式改成兼容性更好的mysql_native_password:
- 登录你的MySQL服务器(比如用MySQL命令行工具)
- 执行以下SQL语句(替换成你的用户名、密码和主机):
ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;
执行完后重启Flask应用,应该就能正常连接了。
解决方案2:升级或更换数据库驱动
如果你不想修改MySQL的配置,可以尝试升级或更换适配caching_sha2_password的驱动:
升级mysql-connector-python:
执行以下命令升级官方驱动:pip install --upgrade mysql-connector-python确保你的数据库URI使用
mysql+mysqlconnector://前缀,比如:SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://user:password@localhost/your_db'改用mysqlclient驱动:
mysqlclient是Flask生态中常用的MySQL驱动,对caching_sha2_password支持良好,安装命令:pip install mysqlclient对应的数据库URI前缀是
mysql://:SQLALCHEMY_DATABASE_URI = 'mysql://user:password@localhost/your_db'
解决方案3:在连接URI中指定认证插件
如果使用的是mysql-connector-python驱动,也可以直接在数据库连接URI里强制指定使用mysql_native_password插件,不需要修改MySQL用户配置:
SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://user:password@localhost/your_db?auth_plugin=mysql_native_password'
内容的提问来源于stack exchange,提问作者venkatesh

