通过python

时间:2019-05-23 06:39:36

标签: python mysql mysql-python mysql-connector

我正在尝试使用下面提到的python代码连接到Mysql服务器

import mysql.connector

mydb = mysql.connector.connect(
    host = "127.0.0.1",
    port = 5000,
    user = "user id",
    password = "password"
    )

print(mydb)

但是在运行此代码以测试我是否已与MySQL连接时,我遇到了我无法理解的错误。

Traceback (most recent call last):
  File "C:\Users\varul.jain\Desktop\Test Phase\Mysql\mydb_test.py", line 7, in <module>
    password = "root"
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\__init__.py", line 179, in connect
    return MySQLConnection(*args, **kwargs)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 95, in __init__
    self.connect(**kwargs)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\abstracts.py", line 716, in connect
    self._open_connection()
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 210, in _open_connection
    self._ssl)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 142, in _do_auth
    auth_plugin=self._auth_plugin)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\protocol.py", line 102, in make_auth
    auth_data, ssl_enabled)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\protocol.py", line 58, in _auth_response
    auth = get_auth_plugin(auth_plugin)(
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\authentication.py", line 191, in get_auth_plugin
    "Authentication plugin '{0}' is not supported".format(plugin_name))
mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported

注意:我已经将默认值初始化为5000

出于测试目的,我已初始化端口5000,用户-root和密码-root

但是根据上述错误,授权默认密码不可用

有没有办法检查用户ID和密码以进行交叉验证并相应地以python代码进行更新?

建议会有所帮助

3 个答案:

答案 0 :(得分:2)

请按照以下步骤操作:

  1. 您必须安装MySQL Server(https://dev.mysql.com/downloads/installer/

从此安装的MySQL Server。

  1. 在您的python环境中安装mysql-connector-python
  2. 使用此代码:

    打开数据库连接

    导入mysql.connector

    mydb = mysql.connector.connect(host =“ 127.0.0.1”,port =“ 3306”,user =“ root”,password =“ root”,auth_plugin =“ mysql_native_password”)

    print(mydb)

答案 1 :(得分:1)

根据python库的SQL文档。您需要指定auth插件,如下所示:-

conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1',port=5000, database='test', auth_plugin='mysql_native_password')
print(conn)

答案 2 :(得分:0)

我在使用 webmin + python3 的 centOS VPS 上遇到了类似的问题。

一开始我觉得可能是连接包的原因,所以我试了一下:

  1. 'python3 -m pip install mysql-connector',在python中它将使用'import mysql.connector'

  2. 'pip3 install PyMySQL',在python中使用'import PyMySQL'

两者都没有解决问题。然后我从一个网站上找到了其他几种连接方式(现在我不记得它的地址了),详细解释了每种的优点和缺点,根据它,我最终选择使用mysqlclient。

  1. 'sudo pip3 install mysqlclient' ,我使用它是因为它更通用并且支持 python3。

以上都没有解决我的问题,我仍然面临连接错误。

我尝试了几次随机测试,不小心使用了 root 和配置文件中的 skip-grant-tables 选项,我能够使用 SSH python 代码登录 mysql,但这不是原因,因为这是一个正常的新创建的无论我在代码中访问什么主机,本地主机,127.0.0.1,域,....

所以我取消了 skip-grant-tables 选项,因为没有保护是有风险的(仅用于测试)。

最近,默认情况下 MySQL 服务器中已经存在用户“root”,我发现它有 4 个条目,所以我尝试在 webmin -> 服务器 -> MySQL 服务器 -> 用户权限中创建 4 个单独的类似条目记录。< /p>

这些记录具有相同的用户名和较少的权限,但分配的主机内容相似。它们是 'local' 、 '127.0.0.1' 、 'myservername.vps.provider.ca' 、 '::1'

(不知道最后一个是什么意思)

而且,Bingo,在添加了以上 4 个条目后,新用户可以使用通过 python3 代码提供的密码 authenthicate 登录。

(记住第一次,你必须在MySQL Server 页面中设置MySQL Admin 'root' 密码,这样密码登录认证功能才会起作用,并且该密码不需要与系统的root 密码相同)

仅此而已,这需要我 6 个小时。希望它也可以帮助使用 webmin 的人。如果它对您有帮助,请投赞成票。谢谢