2015-12-26 2 views
2

Я пытаюсь использовать pymsql для подключения к MySQL db, хост «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', связана с тем, что вы, вероятно, имеете только доступ к mysql от 'root'@'localhost', 58.196.159.221 - это IP-адрес системы, с которой работает ваша программа python - не верьте мне? запустите ifconfig и проверьте свой IP-адрес.

фикс: Подключение к консоли mysql и выполните следующее:

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

Это позволит для удаленного доступа к MySQL.

Если вы хотите только доступа MySQL с локального хоста вы запустите это:

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

Если вы хотите предоставить доступ с любого IP-адреса:

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

FLUSH ЛЬГОТЫ перезагружает привилегии из базы данных mysql, что необходимо после внесения изменений в разрешения пользователя.

+0

yes, 58.196.159.221 - это IP-адрес моей системы, в которой работает мой python. – 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' IMHO превосходит' MySQLdb', потому что у него нет сумасшедших раздражающих зависимостей, которые требует 'MySQLdb'. 'pymysql' реализован исключительно в python без зависимостей, что делает его легким для установки в разных операционных системах с помощью' pip' и ничего другого - это золото. – OkezieE

+0

спасибо, что помогает! – RTzhong

+0

Ты серьезно? это не затрагивает проблему вообще! устраните проблему, не используйте другой подход, который может быть недоступен для человека с проблемой! – pythonian29033

0

58.196.159.221, скорее всего, адрес клиента, на котором выполняется сценарий. У него нет разрешения на доступ к удаленной базе данных; вам придется настроить это в самой MySQL.

Смежные вопросы