2015-12-26 381 views
2

我想使用pymsql連接到MySQL數據庫,主機是'115.28.236.225',並使用默認端口:3306。代碼如下(db_connect.py):pymysql無法連接到mysql

import pymysql 

def connDB(): 
    conn=pymysql.connect(host='115.28.236.225',user='root',passwd='xxx',db='yyy',charset='utf8', port=3306) 
    cur=conn.cursor(); 
    return (conn,cur); 

conn,cur=connDB() 

我用python db_connect.py運行,但是,我得到了錯誤消息pymysql.err.OperationalError: (1045, u"Access denied for user 'root'@'58.196.159.221' (using password: YES)"),我不知道在哪裏主機'58 .196.159.221' 從何而來,不對應一個代碼。我試圖用MySql Workbench連接到MySQL,並且工作,所以,我相信它一定是python代碼有問題)。

我該如何解決這個問題?提前致謝!

回答

5

pymysql很棒,因爲它是純粹在python中實現的 - 沒有外部依賴關係。

我敢打賭,您沒有爲來自外部來源的root帳戶設置適當的權限。 你之所以看到pymysql.err.OperationalError: (1045,u"Access denied for user 'root'@'58.196.159.221'是因爲你可能只有'root'@'localhost',58.196.159.221是你的python程序運行的系統的IP地址 - 不要相信我嗎?運行ifconfig並檢查您的IP地址。

修復: 連接到控制檯mysql並運行以下命令:

GRANT ALL ON root.* TO 'root'@'58.196.159.221' IDENTIFIED BY 'ENTER_PASSWORD_HERE' ; 
FLUSH PRIVILEGES; 

這將使MySQL的遠程訪問。如果要授予任何IP地址訪問

GRANT ALL ON root.* TO 'root'@'localhost' IDENTIFIED BY 'ENTER_PASSWORD_HERE' ; 
FLUSH PRIVILEGES; 

GRANT ALL ON root.* TO 'root'@'%' IDENTIFIED BY 'ENTER_PASSWORD_HERE' ; 
FLUSH PRIVILEGES; 

FLUSH PRIVILEGES重新加載

如果從本地主機只想訪問MySQL你運行該來自mysql數據庫的權限,在對用戶權限進行更改後這是必需的。

+0

是的,58.196.159.221是我的系統在我的python運行的IP地址。 – RTzhong

1

試着用這一個:

#!/usr/bin/python 
import MySQLdb 

db = MySQLdb.connect(host="115.28.236.225", user="root", passwd="xxx", db="yyy")  

cur = db.cursor() 

cur.execute("SELECT * FROM YOUR_TABLE_NAME") 

for row in cur.fetchall(): 
    print row[0] 

db.close() 
+0

問題不在於'pymysql'模塊。這是用戶權限問題。另外'pymysql'恕我直言'優於'MySQLdb',因爲它沒有'MySQLdb'所要求的瘋狂惱人的依賴關係。 'pymysql'純粹是在python中實現的,沒有依賴關係,這使得使用'pip'安裝在不同的操作系統上變得輕而易舉 - 這是黃金。 – OkezieE

+0

謝謝,這有幫助! – RTzhong

+0

你是認真的嗎?這並沒有解決這個問題!解決問題,不要使用另一種可能無法解決問題的方法! – pythonian29033

0

58.196.159.221是最有可能的是運行腳本的客戶端的地址。它沒有訪問遠程數據庫的權限;你將不得不在MySQL中配置它自己。