python连接mysql数据库报错pymysql.err.OperationalError

一、报错信息

pymysql.err.OperationalError: (1045, “Access denied for user ‘root’@‘localhost’ (using password: YES)”)

Traceback (most recent call last):
  File "G:/PycharmProjects/GUI_Pro/py_mysql/pracV1.py", line 20, in <module>
    database = 'localhost_3306'
  File "G:\PycharmProjects\GUI_Pro\venv\lib\site-packages\pymysql\__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "G:\PycharmProjects\GUI_Pro\venv\lib\site-packages\pymysql\connections.py", line 325, in __init__
    self.connect()
  File "G:\PycharmProjects\GUI_Pro\venv\lib\site-packages\pymysql\connections.py", line 599, in connect
    self._request_authentication()
  File "G:\PycharmProjects\GUI_Pro\venv\lib\site-packages\pymysql\connections.py", line 861, in _request_authentication
    auth_packet = self._read_packet()
  File "G:\PycharmProjects\GUI_Pro\venv\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
    packet.check_error()
  File "G:\PycharmProjects\GUI_Pro\venv\lib\site-packages\pymysql\protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "G:\PycharmProjects\GUI_Pro\venv\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

二、代码:

import pymysql
#连接数据库
conn = pymysql.Connect(
    host = 'localhost',  
    port = 3306,  #端口号
    user = 'root',  #服务器上mysql的用户名,安装时填写确认的
    password = '123456',  #服务器上mysql的密码,安装时填写确认的
    database = 'mysql_sun'   #服务器上的数据库名之一,选择需要连接的那个数据库
    #charset = 'utf8'
)

#获取游标,使用cuisor方法
cursor = conn.cursor()
#用excute方法执行sql语句
sql = 'select * from user'
cursor.execute(sql)
#使用fetchall方法获取全部数据,fetchone方法获取一条数据,
res = cursor.fetchall()
print(res)
#关闭数据库
conn.close()

三、原因分析:
1、可能是密码错误
2、可能是因为:新版mysql使用的caching_sha2_password认证方式,换成mysql_native_password就可以。
数据库:

四、解决:
1、修改数据库密码
2、更换密码的认证方式。
步骤:
(1)是在cmd命令行连接mysql, 通过

mysql -u root -p root
#  -u   后是数据库名
#  -p   后是密码

(2)然后输入

ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘dong1990’;
再跑python脚本就没问题了。

五、以上错误是因为一开始密码写错


版权声明:本文为weixin_42976139原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。