iT邦幫忙

0

PyMySQL連接不上database

我想請問為什麼連線成功 卻無法連接上資料庫
要做的內容是將Navicat for MySQL中的資料庫的內容
輸出至myeclipse

連接至資料庫錯誤
https://ithelp.ithome.com.tw/upload/images/20210506/20137281jGJUQCuGKA.png
連線是成功的
https://ithelp.ithome.com.tw/upload/images/20210506/20137281kshG5MFdj5.png
https://ithelp.ithome.com.tw/upload/images/20210506/20137281QtTOBccKLE.png
MySQL也可以看到有我新增的pythonstock
https://ithelp.ithome.com.tw/upload/images/20210506/201372817RukJua9A9.png
https://ithelp.ithome.com.tw/upload/images/20210506/20137281ux0A5iLKLh.png
使用到的程式
myeclipse 2020.9.16
python3.9
Navicat 15 for MySQL
mysql-8.0.24

因為有點急 所以能幫忙解決的人 匯款200元以示感謝

1
rogeryao
iT邦大師 2 級 ‧ 2021-05-07 00:00:10

mysql-8.0.24 :
connect 加入參數 auth_plugin='mysql_native_password'
請參閱 : Python讀取mysql出現Authentication plugin 'caching_sha2_password' is not supported解決方法

出來的結果還是一樣
https://ithelp.ithome.com.tw/upload/images/20210507/20137281YVpcFhKbI1.png

rogeryao iT邦大師 2 級 ‧ 2021-05-07 09:00:45 檢舉

1.database='pythonstock'
2.PyMySQL 可能未安裝或版本有問題
https://ithelp.ithome.com.tw/upload/images/20210507/20085021Re9BbDOJDF.png

參數用 database 是完整的,用db 也是可以的.
https://pymysql.readthedocs.io/en/latest/modules/connections.html
db – DEPRECATED Alias for database.
passwd – DEPRECATED Alias for password.

2
一級屠豬士
iT邦大師 1 級 ‧ 2021-05-07 07:45:18
#!/usr/bin/env python3

import pymysql

try:
  db = pymysql.connect(
     unix_socket = "/tmp/mysql.sock",
     user="miku",
     databse="miku",
     password="wrongpass"
  )
except pymysql.Error as e:
  print("連線錯誤 pymysql %d: %s" %(e.args[0], e.args[1]))
else:
  print("連線成功")
finally:
  print("離開")

補充了 except 部分, 會將錯誤代號及說明顯示. 執行結果如下:

https://ithelp.ithome.com.tw/upload/images/20210507/20050647SNlphmmKqJ.png

例如這是密碼不正確的.建議你先將 except 部分改一下,才好做後續處理.

2
海綿寶寶
iT邦大神 1 級 ‧ 2021-05-07 08:47:17

1.你兩次的密碼(password,123456)和 db 名稱(pythonstock,stockinfo) 不一樣,你自己要確認這兩項資料的正確性
2.把

except:
   print("Error when Connecting to the DB")   

改成

except pymysql.err.OperationalError as oe:
   print("Error:", oe)

可看出更明確的錯誤原因

看更多先前的回應...收起先前的回應...

成功了 非常感謝您
https://ithelp.ithome.com.tw/upload/images/20210507/20137281ltcR4E21xA.png

1.問題解決就好, 選個最佳解答以結案
2.200 元很有誠意,轉給創世基金會比較有意義 https://www.genesis.org.tw/official/faq
/images/emoticon/emoticon41.gif/images/emoticon/emoticon41.gif/images/emoticon/emoticon41.gif

沒有問題 非常感謝您
https://ithelp.ithome.com.tw/upload/images/20210507/20137281rnO6SHc0IX.png

你真是我近十年來在這裡看過
最守信用又動作最快的人了,按三個
/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif

1
japhenchen
iT邦大師 1 級 ‧ 2021-05-07 10:20:59

[回覆更新] pyMySQL 不支援 python3.9.x ,試著用另一台電腦安裝3.8版,你的程式在3.8跑看看

小魚 iT邦大師 1 級 ‧ 2021-05-08 09:35:43 檢舉

他有寫這錯誤訊息嗎?
雖然這錯誤我剛才也出現過,
之後裝完沒多久就沒在用了...

0
小魚
iT邦大師 1 級 ‧ 2021-05-08 09:34:06

我測試要這樣寫才可以,
如果還是不行,
要不要試著印出錯誤訊息看看,
看是沒有裝套件,
還是裝錯地方(裝錯地方也會顯示沒有裝)...

import pymysql
try:
    conn  =  pymysql.connect(host = '127.0.0.1', user = 'root', passwd = "mysql", db = 'test')
except pymysql.Error as e:
    print("連線錯誤 pymysql %d: %s" %(e.args[0], e.args[1]))
    sys.exit()

cur = conn.cursor() 
cur.execute( "SELECT * FROM employee" ) 
for r in cur: 
    print (r) 
cur.close() 
conn.close()
(1, 'Joe', 70000, 1)
(2, 'Henry', 80000, 2)
(3, 'Sam', 60000, 2)
(4, 'Max', 90000, 1)
(5, 'Janet', 69000, 1)
(6, 'Randy', 85000, 1)

我要發表回答

立即登入回答