1.要使用Python的pymysql库对mysql数据库进行操作时,要先在Ubuntu想安装pymysql库。
安装过程:
***:首先查看Ubuntu上是否安装好pip3,如果没有,用命令:apt-get install pip3 安装(一般安装的时候提示: E:unable to local package 的时候,都要先apt-get update进行更新,再重新安装即可)
***:安装好pip3之后,用命令:pip install python3-pymysql 安装pymysql库,一直按Y即可。
2.安装好pymysql之后,就可以在Ubuntu进行数据库的连接
连接的步骤如下:
import pymysql
con=pymysql.connect(
host='localhost',#设置本地连接,如果非本地就输入数据库的IP
user='root',#数据库的用户名
passwd='password',#密码
charset='utf8'#或者utf8mb4
db='db_name'#连接的数据库的名字
)
#此后就可以建立游标对所连接的数据库进行操作了
cursor=con.cursor()
先导入pymysql模块,再用.connect()函数进行连接,connect函数的参数如上所示,根据自己的数据库实际情况填写即可
本博客的主要目的并不是教大家怎么连接mysql数据库,其实在网上就有很多这样的教程,比我的更详细的很多,大家自己多去查看就是了
3.本博客最主要的目的是帮大家解决连接错误的问题:
错误1:系统提示:pymysql.err.internalError:(1689:Access denied for user 'root'@localhost by database 'db_name'
这是很正常的,因为我们在安装数据库和建立数据库用户的时候都会有设置的错误,或者没有修改默认的设置,这些都要大 家自己靠经验的积累了。
出错的大概原因可以告诉大家:
大家可以进入mysql的root用户下,执行以下命令:
root@glon-virtual-machine:/home/glon# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 5.7.23-0ubuntu0.18.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select user,plugin from mysql.user;
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.session | mysql_native_password |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
| glon | mysql_native_password |
+------------------+-----------------------+
即可看到数据库下各用户的plugin是不同的,其实root的是auth_socket,而其他用户是mysql_native_password(这里只提示 大家两者不同导致的连接错误,具体原因还需进一步探究)
这时可以
方法1:设置root的插件plugin也是:mysql_native_password(具体步骤大家去网上搜就好了,这里不赘述)
方法2:不使用root用户,而是使用其他普通用户,并且加上这两句命令:
mysql>>GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql>>flush privileges;
这就解决了问题了
错误2:pymysql.err.operationerror:(1044:后面的忘了,大体原因差不多)
这时,出错的原因是因为所连接的数据库的问题,如果你把.connect()函数中的 db 参数注释掉,你会发现没有错误 了,这都是所创建的数据库的权限问题,只要加上下面的语句就可以解决:
grant all privileges on db_name.* to 'username'@localhost identified by 'password';
flush privileges;
综上所述,mysql连接错误都是数据库的设置问题导致出错的,所以大家在学习mysql或者其他的数据库的时候要多去钻研其中的设置问题,了解数据库里面的权限和设置的原理,以便可以在发现错误的时候及时感悟到错误所在。