pymysql是一个python连接操作mysql数据的一个模块。
首先得安装pymysql。
pip install pymysql
安装成功后就可以通过下面语句访问数据库了。
# -*- coding: UTF-8 -*-
import pymysql
class Mysql(object):
def __init__(self,IP,DB):
try:
self.conn = pymysql.connect( host=IP, port=3306, user='root', password='root', connect_timeout = 1, db=DB, charset='utf8' )
except Exception as e:
print('连接不成功')
print(e)
else:
print('连接成功')
self.cur = self.conn.cursor()
def close(self):
self.cur.close()
self.conn.close()
def sql(self,SQL):
# 查
# sql = 'select * from versa'
sql = SQL
self.cur.execute(sql)
res = self.cur.fetchall()
return res
报错pymysql.err.OperationalError: (1045, u"Access denied for user 'root'@'localhost' (using password: No)")
网上给了各种各样的方法,大多是通过各种方式修改密码。
最简单的方法是更换了root密码的认证方式解决的,新版mysql使用的caching_sha2_password,换成mysql_native_password我就可以连上了。
步骤是在cmd命令行连接mysql, 通过mysql -u root -p dong1990
然后输入ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
DONE!
这时再跑下python脚本就可以连接了。
设置远程访问:
1、登陆mysql数据库
mysql -u root -p
查看user表
mysql> use mysql;
Database changed
mysql> select host,user,password from user;
+--------------+------+-------------------------------------------+
| host | user | password |
+--------------+------+-------------------------------------------+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+--------------+------+-------------------------------------------+
2 rows in set (0.00 sec)
可以看到在user表中已创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名,
(1)有时想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可。
2、实现远程连接(授权法)
将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。
update user set host = ’%’ where user = ’root’;
将权限改为ALL PRIVILEGES
mysql> use mysql;
Database changed
mysql> grant all privileges on *.* to root@'%' identified by "password";
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,password from user;
+--------------+------+-------------------------------------------+
| host | user | password |
+--------------+------+-------------------------------------------+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| % | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+--------------+------+-------------------------------------------+
3 rows in set (0.00 sec)
这样机器就可以以用户名root密码root远程访问该机器上的MySql.
3、实现远程连接(改表法)
use mysql;
update user set host = '%' where user = 'root';
这样在远端就可以通过root用户访问Mysql.