Error:1045, "Access denied for user 'root'@'localhost' (using password: YES) (Phon3.6+Mysql8.1 )
阿新 • • 發佈:2018-11-14
哇,鬧了一個大烏龍,昨天,寫了個指令碼給之前移植的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'''