我试图连接到Linux服务器上的数据库,使用PHP一切正常:
$mysqli= new mysqli($_DBHOST, $_DBUSER, $_DBPASS, $_DB);
我也可以使用命令行连接:
mysql -u xxx -p
但是当我尝试使用pymysql连接Python时,我收到以下错误:
pymysql.err.InternalError: (1130, "Host 'xxx' is not allowed to connect to
this MariaDB server")
Python代码:
import pymysql
conn = pymysql.connect(host="xxx",user='xxx', passwd='xxx', db = 'xxx',
,port=3306, autocommit=True)
这怎么可能呢?它不能是一个权限问题,因为PHP可以很好地连接,或者可以吗?
答案 0 :(得分:0)
试试这个
try:
import mysql.connector
mysql_connector = mysql.connector
except:
import pymysql
mysql_connector = pymysql
mysql_connector.connect(user='root', password='root', host='xxx:3306', database='test')
答案 1 :(得分:0)
你能做的最好就是使用MySQLdb(区分大小写)它是最好的软件包。 然后你可以直接在pandas数据帧中导入你的表。
这很容易,但很难记住正确的拼写:
pip install MySQL-python
注意:运行上述命令时可能必须使用某些依赖项。关于如何在各种平台上安装这些的一些提示:
sudo apt-get install python-pip python-dev libmysqlclient-dev
sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
使用MySQLdb
import MySQLdb
conn = MySQLdb.connect(host="xxx.xxx.xx.x", user="name", passwd="password", db="database_name")
cursor = db.cursor()
import pandas as pd
df = pd.read_sql("select * from your_table",conn)
答案 2 :(得分:0)
两个猜测:
运行mysqladmin variables | grep socket
以获取套接字的位置,并尝试设置如下连接:
pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock")
运行mysqladmin variables | grep port
并验证端口是3306.如果没有,您可以手动设置端口,如下所示:
pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX)