iT邦幫忙

1

python 連 mysql

  • 分享至 

  • xImage

目前寫python 要連接mysql

https://ithelp.ithome.com.tw/upload/images/20191113/20122463iiZ6bN8opS.png

不過都會顯示錯誤,不能連接上
我有把mysql的程式開起來
command line client 也有建立一個database test

錯誤如下:
https://ithelp.ithome.com.tw/upload/images/20191113/20122463CG3vNYykf5.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
echochio
iT邦高手 1 級 ‧ 2019-11-13 20:48:12

上面不是有寫 .... 連不到 127.0.0.1 的 mysql 嗎 ?
請用標準的 mysql 指令 看看能不能連 可連線 再試 python .....
mysql client 不能連 mysql Seever 那你要先搞定 mysql 再來學 python 連 mysql

mysql -h 127.0.0.1 -uroot -ptest123 TESTDB

正常 python 我會用 localhost 去連 ... localhost 與 127.0.0.1 是不同的

import pymysql
db = pymysql.connect("localhost","root","test123","TESTDB" )
cursor = db.cursor()
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
print ("Database version : %s " % data)
db.close()
lingwu iT邦新手 5 級 ‧ 2019-11-13 21:30:15 檢舉

改成localhost還是出現一樣的問題
https://ithelp.ithome.com.tw/upload/images/20191113/20122463hAwuA3Urbi.png

echochio iT邦高手 1 級 ‧ 2019-11-13 23:15:42 檢舉

請問您有用 mysql 指令連嗎 ?
不會連 mysql 指令都不能連 ....
那個 error 不一樣了耶 ... 那是python 問題
修改 hosts

127.0.0.1 localhost
0
Darwin Watterson
iT邦好手 1 級 ‧ 2019-11-13 20:50:22

MySQL一般的預設 port 都是 3306 /images/emoticon/emoticon10.gif
不過為什麼你的 connection 可以不用指定 port /images/emoticon/emoticon19.gif

https://ithelp.ithome.com.tw/upload/images/20191113/20109107LoaFDp9PIl.png

Python 的黑科技 ?
/images/emoticon/emoticon77.gif

說明上有寫預設3306。因該是如果沒特別指定的話。就會自動跑3306才對。
所以這樣沒指定的話倒是不意外。

0
ckp6250
iT邦好手 1 級 ‧ 2019-11-13 21:59:35

感覺像是 mysql 的權限設定問題,
或者是 bind-address 的問題。

1
小魚
iT邦大師 1 級 ‧ 2019-11-13 22:09:51

Windows的話先使用HeidiSQL之類的測試看看能不能連,
可以再使用Python.

另外也沒看到詳細的程式碼.

souda iT邦高手 1 級 ‧ 2019-11-14 08:42:11 檢舉

+1

lingwu iT邦新手 5 級 ‧ 2019-11-15 22:48:15 檢舉

我在python上打的程式只有上面那樣喔/images/emoticon/emoticon16.gif

小魚 iT邦大師 1 級 ‧ 2019-11-16 00:07:40 檢舉

那就難怪連不上了啊.
echochio大大有稍微寫一下,
可以參考看看.

1
一級屠豬士
iT邦大師 1 級 ‧ 2019-11-13 23:23:49

這個錯誤訊息是 MySQL ERROR 2003
google mysql error 2003 , 就能看到好幾種原因了,與解決方法.

Python 的 MySQL 連線模組,也是呼叫 MySQL Client lib.
會逐級拋出錯誤代碼.看錯誤代碼,然後設法排除.

當你使用 MySQL Client 程式 (mysql -u user -p) ,
是走 socket file 連線,所以你能連線.
但不代表用 127.0.0.1 或是 localhost 能連線. 或是有防火牆擋住了.
你也可以改用 unix_socket 連線方式,試試看.

寫了個用 unix_socket 連線測試的程式

#!/usr/local/bin/python3

import pymysql

con = pymysql.connect(unix_socket='/tmp/mysql.sock',
      user='julia',password='Julia#567',database='julia')

with con:
  cur = con.cursor()
  cur.execute("select version()")
  
  row = cur.fetchone()
  print(row[0])
  cur.close()

執行結果:

| => chmod +x pymysql1.py 
____________ [23:38:17] ~/work/m1911/d1113 
| => ./pymysql1.py 
8.0.18

你參考看看

3

從錯誤碼來看是連不到你的資料庫。
由於2003錯誤碼是連連接都連接不上。所以可以暫時排除帳密的問題
也可以先不用理會權限的問題。

那為何連接不上去的原因就有如下了。

1.mysql伺服器未啟動:這個問題的可能性會比較大。可以先直接下命令mysql -uroot -p你的密碼。
看能否正常進去mysql命令列。如果可以正常進入因該會看到

Mysql>

這樣的介面出現,如果沒有,且有出現錯誤訊息的情況下。代表你的mysql其實還未啟動。先解決這個問題吧

2.防火問題:認真來說,這個問題的可能性會比較小。因為你是用127.0.0.1的情況下。一般來說防火的預設不可能會擋本機ip的。除非有特別去做限制。所以我第一優先不會先考量防火的問題。

3.其它問題:如mysql使用權限或是運行權限的問題。不過這比較難碰到就是了。

lingwu iT邦新手 5 級 ‧ 2019-11-15 22:47:12 檢舉

可以請問一下要怎麼啟動mysql?
https://ithelp.ithome.com.tw/upload/images/20191115/20122463SrC0L1i64n.png

網路上查了一些方法可是問題還是一樣
而我開command line 時直接輸入密碼是可以進去的
https://ithelp.ithome.com.tw/upload/images/20191115/2012246378Rqh6r7Mg.png

lingwu iT邦新手 5 級 ‧ 2019-11-15 23:16:07 檢舉

我是下載mysql workbench 8.0 的
如果我在cmd上打net start mysql80就有錯誤
https://ithelp.ithome.com.tw/upload/images/20191115/20122463qKaJrm83U5.png
改成在管理員模式進行
https://ithelp.ithome.com.tw/upload/images/20191115/20122463E7gl0ycnKw.png
而不是顯示:
mysql80 服務正在啟動
mysql80 服務已經啟動成功

你可以先試試上面一些大大的程式碼先試連看看好了。
目前看起來你的mysql因該是有正常啟動才對。

那剩下來的就是py的連線處理問題。
我對py並不是很熟。所以沒辦法給你很好的意見。

剛看了上面一些大大們寫的。我擔心會有如大大們說的。py得要用額外的連結方式才行。畢竟我對py並非熟門熟路。我就不獻醜了。

我要發表回答

立即登入回答