python 远程连接数据库出现的问题

时间:2021-08-24 19:18:00

python进行远程连接数据库

python3 利用pymysql模块进行数据库远程连接,但是发现即使代码没有出错误,任然会连接失败。在此过程中出现两个错误,网上寻找一圈解决方案,终于解决问题了。作为刚刚接触python的小白来说,还是很兴奋的。


首先,给出远程连接数据库的代码

import pymysql
#import
#远程登陆数据库
try:
con = pymysql.Connect(
host ='******',#远程登录主机的ip地址
port = 3306,#mysql服务器的端口
user ='root', #mysql的用户
passwd = 'Password',#密码
db = 'databasename' #需要的数据库名称
)
#获取本次的游标
cur = con.cursor()
except pymysql.Error as e :
print("Error %d: %s"%(e.args[0],e.args[1]))


注意:期间加了 try ....except 语句,进行异常捕捉,方便知道出现那些异常


出现问题:

其一:目的主机拒绝访问

python 远程连接数据库出现的问题


分析:目的主机积极拒绝访问,后来经过网上查找。发现数据库的3306端口没有开启,只是本地主机才会登录。当远程登录时,当然是拒绝访问的。


解决方案:

首先查看端口是否打开 netstat -an|grep 3306

此图为开启3306端口的截图,之前显示为. . . 127.0.0.1:3306 . . .


打开mysql配置文件vi /etc/mysql/mysql.conf.d/mysqld.cnf

将bind-address = 127.0.0.1注销​

截图最下面一行注销

重启动ubuntu

再次查看端口是否打开 netstat -an|grep 3306

此时端口3306已经打开


其二:继续报错。Access denide for user

python 远程连接数据库出现的问题


分析:数据库通常只是在装数据库服务器本地才会直接链接。不允许远程连接数据库。所以,我们需要远程数据库对本地进行授权:

解决方案:

用root用户登陆数据库,然后:

grant all privileges on *.* to 创建的用户名 @"%" identified by "密码";

flush privileges;   * 刷新刚才的内容*

格式:grant 权限 on 数据库教程名.表名 to 用户@登录主机 identified by "用户密码";

            @ 后面是访问MySQL的客户端ip地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为

本地访问(那此用户就不能远程访问该mysql数据库了)。

同时也可以为现有的用户设置是否具有远程访问权限。如下:

use mysql;

update db set host = '%' where user = '用户名'; (如果写成 host=localhost 那此用户就不具有远程访问权限)

flush privileges;

grant all privileges on *.* to 'myuser'@'%' identified by 'mypassword' with grant option;

python 远程连接数据库出现的问题

最后,问题决解了!


给出成功后的截图

python 远程连接数据库出现的问题