Error:1045, "Access denied for user 'root'@'localhost' (using password: YES) (Phon3.6+Mysql8.1 )

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xingzishuai/article/details/81809122

哇,闹了一个大乌龙,昨天,写了个脚本给之前移植的mysql添加数据,结果一个小问题困了我0.75天。

脚本代码如下:(期间有个小插曲,我把port=“3306”,报错了,但是很快排查到,去除可双引号)

from pymysql import cursors, connect

# 连接数据库
conn = connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='root',
    database='my_test',
    charset='utf8',
    cursorclass=cursors.DictCursor)

try:
    with conn.cursor() as cur:
        sql = '''
        INSERT INTO sign_guest(realname,phone,email,sign,event_id,create_time) 
        VALUES ("xzs","23184739","[email protected]",0,1,NOW());
        '''
        cur.execute(sql)
        conn.commit()

    with conn.cursor() as cur:
        sql = '''SELECT realname,phone,email,sign FROM sign_guest WHERE phone=%s'''
        cur.execute(sql,  ('23184739',))
        res = cur.fetchone()
        print(res)
finally:
    conn.close()

怎么看都和网上找到的教程差不多啊,为毛报如下这个错呢?

秉着“我不入地狱,睡入地狱的态度”,搜索近1年相关问题的解答,总结如下:

1、修改root密码,注销后重新连接;(失败)

2、取消Mysql连接的权限认证;(失败,且不安全)

3、如我上篇《将Django2中SQLite迁移到Mysql,折腾》那样更换了root密码的认证方式;(失败)

pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

推荐https://blog.csdn.net/dongweionly/article/details/80273095,应该能解决巨大部分人的问题。(除了我)

4、新建用户,配置super  user权限;(失败)

啊,什么鬼啊,workbench能连上,Django能连上,为什么啊,慢着同样是python3,为毛Django里能连上,去看看配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my_test',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='traditional'",
        },
    }
}

对比了下,只有这个不同:host='127.0.0.1'   <--> 'HOST': 'localhost',但是脑编译告诉我,这两个是指向是一样的,不大可能是这个吧,于是继续stackoverflow,翻,翻,翻。

(这里想吐槽一下,网上很多mysql命令本身就无法运行,会报语法错误, 作者不标明环境和版本,或是从其他地方直接复制粘贴,太不负责任了,鄙视,浪费我的时间)

啊西巴!要凉了!那我把host换成localhost吧,结果好了,好了,好了!!!又是什么原因啊! 为什么不能写127.0.0.1?

conn = connect(
    host='localhost',       # 未解之谜:为什么不能写127.0.0.1
    port=3306,
    user='root',
    password='root',
    database='guest_test',
    charset='utf8',
    cursorclass=cursors.DictCursor)

注意:

没有分号:
sql = '''
        INSERT INTO sign_guest(realname,phone,email,sign,event_id,create_time) 
        VALUES ("xzs","23184739","[email protected]",0,1,NOW());
        '''
有分号:
sql = '''SELECT realname,phone,email,sign FROM sign_guest WHERE phone=%s'''

猜你喜欢

转载自blog.csdn.net/xingzishuai/article/details/81809122