win10环境下python3.x远程连接mysql数据库操作数据

用不同的模块有二种方法建立与mysql的连接:

win10环境下python3.x远程连接mysql数据库操作数据

 

方法一:

首先,从sqlalchemy模块导入create_engine类

from  sqlalchemy  import create_engine

 

然后,创建一个连接。

win10环境下python3.x远程连接mysql数据库操作数据

最后,读取表信息:

win10环境下python3.x远程连接mysql数据库操作数据

在第三步的时候可能会抛出如下错误:

"Host is not allowed to connect to this MySQL server"

这些由mysql服务器安装时默认只能本地连接不能远程连接引起的,需要授权其能被远程连接来解决,有两种方法:

1、改表法;

在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"

mysql -u root -p

mysql>use mysql;

mysql>update user set host = '%' where user = 'root';

mysql>select host, user from user;

mysql>flush privileges;      //刷新MySQL的系统权限相关表­或者用‘restart’重启服务器。

win10环境下python3.x远程连接mysql数据库操作数据

再回到python执行第三部,连接获取数据成功。

2. 授权法。

例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

FLUSH   PRIVILEGES;

如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

FLUSH   PRIVILEGES;

如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器的dk数据库,并使用mypassword作为密码

GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

FLUSH   PRIVILEGES;

另外一种方法,不过我没有亲自试过的,在****.net上找的,可以看一下.

在安装mysql的机器上运行:

1、d:/mysql/bin/>mysql   -h   localhost   -u   root  //这样应该可以进入MySQL服务器

2、mysql>GRANT   ALL   PRIVILEGES   ON   *.*   TO   'root'@'%'   WITH   GRANT   OPTION  //赋予任何主机访问数据的权限

3、mysql>FLUSH   PRIVILEGES  //修改生效

4、mysql>EXIT  //退出MySQL服务器

这样就可以在其它任何的主机上以root身份登录啦!

 

方法二:

安装并导入pymysql库:

win10环境下python3.x远程连接mysql数据库操作数据

#建立数据库连接
conn= pymysql.connect(
        host='localhost', # 或者服务器的ip地址
        port = 3306,   #端口号
        user='root',  #用户名
        passwd='111111', #密码
        db ='test',  #数据库名称
        charset = 'utf8' 
        )
cur = conn.cursor()  # 创建一个用于访问数据的指针对象。

#创建数据表
cur.execute("create table a_student(id int ,name varchar(20),class varchar(30),age varchar(10))")
#插入一条数据
cur.execute("insert into a_student values('2','Tom','3 year 2 class','9')")
#修改查询条件的数据
cur.execute("update a_student set class='3 year 1 class' where name = 'Tom'")
#删除查询条件的数据
#cur.execute("delete from a_student where age='9'")

cur.close()     ##关闭cur后就不能再进行数据操作了。没有open反向方法,需要用cur = conn.cursor() 重新初始化即可。
conn.commit()   ##刷新连接以更新数据
conn.close()