win10环境下python3.x远程连接mysql数据库操作数据
用不同的模块有二种方法建立与mysql的连接:
方法一:
首先,从sqlalchemy模块导入create_engine类
from sqlalchemy import create_engine
然后,创建一个连接。
最后,读取表信息:
在第三步的时候可能会抛出如下错误:
"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’重启服务器。
再回到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库:
#建立数据库连接
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()