我正在尝试使用pymsql连接到MySQL db,主机是'115.28.236.225',并使用默认端口:3306.代码如下(db_connect.py):
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代码一定有问题。)
我该如何解决这个问题?提前谢谢!
答案 0 :(得分:5)
pymysql非常棒,因为它纯粹是在python中实现的 - 没有外部依赖。
我愿意打赌您没有从外部来源为root
帐户设置适当的权限。
您看到pymysql.err.OperationalError: (1045,u"Access denied for user 'root'@'58.196.159.221'
的原因是因为您可能只能访问'root'@'localhost'
中的mysql,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。
如果您只想从本地主机访问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 PRIVILEGES重新加载mysql数据库的权限,这在您更改用户权限后是必需的。
答案 1 :(得分:0)
试试这个:
#!/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()
答案 2 :(得分:0)
58.196.159.221很可能是运行脚本的客户端的地址。它没有访问远程数据库的权限;你必须在MySQL本身配置它。