Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用户的mysql访问被拒绝root@localhost(使用密码:否)尽管设置了密码并在连接uri中输入了密码_Mysql_Flask_Sqlalchemy_Flask Sqlalchemy_Pymysql - Fatal编程技术网

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

用户的mysql访问被拒绝root@localhost(使用密码:否)尽管设置了密码并在连接uri中输入了密码,mysql,flask,sqlalchemy,flask-sqlalchemy,pymysql,Mysql,Flask,Sqlalchemy,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) 但是,当我运行我的应用程序时,我会得到: OperationalError: (pymysql.err.OperationalError)

我正在尝试在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中有一个(有效的)密码

请注意,这与其他可能的重复问题不同,因为这些错误消息至少表明连接尝试附加了密码


编辑:没有特别的顺序,我已经:尝试了一个不同的用户,在db.init_app之前检查了连接字符串的状态,创建了一个不同的MySQL实例并尝试连接到它,从连接字符串中删除了pymysql,并尝试用pdb回溯它(没有用,因为我唯一识别为自己的方法调用是init_app())。我还浏览了互联网,发现没有提到任何人在尝试使用密码连接数据库时收到此错误消息。我能想到的唯一可能是从app.config传递到mysql时(当我调用db.init_app时)有人正在更改我的字符串以删除密码。有什么想法吗?如果没有人,我就只能用Postgre或其他什么了。

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

  • 可能您的“连接”语法没有发送密码(就像您认为的那样)

  • 也许你的“用户”(例如“root”)和“主机”(例如“localhost”)的组合在mySQL中的定义与你想象的不完全一样

  • 也许用户和主机的组合并没有像你想象的那样从app.config传递到mysql

  • 建议:

  • 看这里:

    • 在这里:

  • 考虑更改“mysql+pymysql”,看看会发生什么

  • 考虑定义一个不同的用户(“root”可能是个坏主意),看看会发生什么

  • 添加“printf”(或等效炼金术)和/或启用跟踪

  • 本教程还可能有助于:


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

    通过'password123'更改用户'USER\u name'@'localhost'以mysql\u本地\u密码标识。

    在op提供的示例中,您可以将
    用户名
    替换为
    root


    关于插件的更多信息:

    可能的重复密码是否包含任何特殊字符(字母和数字除外)?@jdigitalnot@paulsm4编辑以澄清为什么它不在db.init_应用程序之前,请打印出连接字符串,并确保发送的是您认为发送的内容。看起来很奇怪,mysql认为你没有发送密码。sqlalchemy有禁止通过连接字符串输入密码的选项吗?很好的建议,我已经把它缩小到了可能性#3(我想)。关于如何测试这个有什么想法吗?谢谢,这很有效。但你能解释一下这个命令的作用吗?@AnumSheraz,谢谢。我加了一些注释。