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

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

哇,鬧了一個大烏龍,昨天,寫了個指令碼給之前移植的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'''