这篇文章主要记录自己在使用Ubuntu20.04,本地使用python程序链接MySQL时遇到的问题。
开始我在python程序中完成了对数据库的访问程序编写,在运行过程中发现程序报错,如下:
OperationalError: (1698, "Access denied for user 'root'@'localhost'")
之后我就开始了各种百度错误,寻找解决方法:修改端口,用户权限什么的;都没有解决问题,我只是在本地链接,还没到远程链接的地步。。。
但最终花了一天时间终于找到了解决方式,也是一篇博客:
https://blog.youkuaiyun.com/zy_whynot/article/details/103222588
这篇博客可以解决这个问题,但我感觉应该可以通过类似的方式修改root的权限,来实现相同的方式。(我失败了很多次就没再试了,有兴趣的同学可以试试看doge)
下边写一下方法,同时可以实现在虚拟机Ubuntu和windows真实机访问数据库
1.创建一个新的sql用户名并修改权限
进入mysql之后
create user 新的用户名@'%' identified by '新的密码';
用户名和密码,都是自己设置,尽量简单一些吧,主要是学习用;
之后给用户名赋予权限
grant all privileges on *.* to 新的用户名@'%' with grant option;
然后进入mysql中查看更改的结果
use mysql;
select host, user from user;
显示结果应该如下:
2.查看修改后的属性
查看端口号和重启MySQL
端口号一般都为3306,不会改动,除非你自己改了
show global variables like 'port';
service mysql restart
重启服务在退出MySQL之后,或者另一个终端
3.Ubuntu下使用python程序链接数据库
程序如下
import pymysql
conn = pymysql.Connect(host='localhost', port = 3306, user='用户名', password='密码', database= '你想访问的库名')
cursor = conn.cursor()
sql = """select * from students;"""
row_count = cursor.execute(sql)
print("SQL语句执行影响的行数: %d" % row_count)
for line in cursor.fetchall():
print(line)
cursor.close()
conn.close()
成功的话,应该返回数据库中的内容
4.Windows下操作
首先需要在知道数据库所在的ip地址
ifconfig
能够查询Ubuntu下的IP,inet后面的就是ipv4我们常用的地址,记住这个地址,将之前的程序中的host后修改为它,在运行程序;
同样可以访问虚拟机中的数据库,获得相同的数据。
完结撒花!