一.简介
MySQL 是一个开源、免费且成熟稳定的关系型数据库管理系统(RDBMS),被广泛应用于各类 Web 应用和爬虫数据存储中。 所谓“关系型”,指的是它将数据以二维表格的形式组织存储(类似 Excel 工作表),表与表之间可以通过共有的字段(如用户ID)建立关联,配合结构化查询语言(SQL),能够对数据进行非常严谨、灵活的增删改查操作,并严格保证数据的一致性和完整性(支持事务 ACID)。在爬虫开发中,MySQL 常作为最终的数据归宿地,通过编写 Pipeline 组件将 Scrapy 抓取的清洗后数据持久化存储到本地或云端的 MySQL 服务中,便于后续的查询与分析。
二.可视化结构
由于MySQL本身是在cmd命令行中操作的,因此需要借助可视化工具获得更好更直观的使用体验,常用第三方可视化工具有Navicat、DBeaver等等,这里使用DBeaver进行演示。
右侧端口号为3306的localhost,就是我们电脑上的MySQL服务程序,MySQL数据库默认端口号是3306,下面数据库一栏中放着默认数据库和我们创建的所有数据库,在使用中我们应避免使用默认数据库。
三.SQL语言
由于数据库管理系统功能非常多,不仅存储数据,还包含:数据的管理、表的管理、库的管理、账户管理、权限管理等等,所以操作数据库的SQL语言,也基于功能,被划分为四大类。SQL语句大小写不敏感,命令结束必须带分号!
1.数据定义:DDL(Data Definition Language)库与表的操作
a.库的相关操作
输入命令show databases;查看数据库。
输入命令use 数据库名称;使用和切换数据库,后续想要更换数据库进行操作,也输入此命令。
输入命令select database();查看当前正在使用的数据库,鼠标选中单条命令可单独执行此命令。
输入命令create database [if not exists] 数据库名称 [charset 编码名称];创建数据库,中括号表示可写可不写,写的话不用写括号直接写命令,如果加第一个括号中的内容,表示如果存在同名数据库就不进行任操作,反之创建数据库。第二个括号中内容作用是设置编码方式,MySQL默认utf-8编码,这里不用加横杠,最好显式设置一下。
注:左侧不显示数据库就右击刷新一下。
输入命令drop database 数据库名称;删除指定数据库。
b.表的相关操作
在我们创建表时要为列指定一个列类型,列类型有以下几种可按需选择:
输入命令create table [if not exists] 表名称( 列名称 列类型, 列名称 列类型, ......);创建表(注意图中格式,且最后一行没逗号!),如果加括号中的内容,表示如果存在同名表就不进行任操作,反之创建表。
输入命令rename table 旧表名 to 新表名;来修改表名。
输入命令alter table 表名 add 列名 列类型;单独添加一列(不能添加数据)。
输入命令alter table 表名 change 旧列名 新列名 新列类型;更改列名和列类型,如需只更改类型,写相同列名即可。
输入命令alter table 表名 drop 列名;单独删除一列。
输入命令show tables;查看表(注:在此之前应先用use选择使用哪个数据库)。
输入命令desc 表名;查看表结构(每一列的类型等信息),库里有多张表,难免会忘记某张表的设置信息,这时就需要靠此命令查询。
输入命令drop table 表名;删除指定数据表。
2.数据操纵:DML(Data Manipulation Language)增删改数据
a.数据插入(字符串最好用单引号)
输入命令insert into 表名(列名) values(值1)[, (值2), (值3)......];进行单列插入,插入一条或多条数据。
输入命令insert into 表名(列1, 列2, 列3, ......) values(列1对应值, 列2对应值, 列3对应值, ......), [(列1对应值, 列2对应值, 列3对应值, ......), ......];进行多列插入,插入一条或多条数据。
注:多列插入可以省略列名,但值的位置和类型必须一一对应!
b.数据删除
条件判断的常见操作符:
输入命令delete from 表名称 [where 条件判断];从表中删除数据。
如果不加中括号中的条件判断句,就是清空整张表中的数据,但不删除表格。
c.数据更新
输入命令update 表名 set 列 = 值 [where 条件判断];进行数据更新操作。
不写条件判断,就是修改整张表中指定列的所有值。
3.数据查询:DQL(Data Query Language)查询和计算数据
a.基础查询
输入命令select 字段列表 | * from 表;进行数据查询,“ | ”表示前后可选。
“ * ”是通配符,代表所有。
b.分组聚合
简介:如果要统计一个班级中男生和女生的人数,就需要先按性别分组,再i统计每组人数,这就是分组聚合。
常用聚合函数;
输入命令select 字段 | 聚合函数 from 表 [where 条件] group by 列;进行分组聚合操作,group by后写了谁,字段中才能出现谁,但聚合函数无限制,可以有一个或多个。
由于这个结果并不够直观,我们可以加上gender字段增加视觉效果,如果字段和聚合函数同时存在,中间要有逗号隔开,否则报错!
聚合函数可以有一个或多个,中间同样要逗号隔开!这里count(gender)表示满足条件且有性别的数据有几条。
c.排序分页
输入命令select 列 | 聚合函数 | * from 表 where ... group by ... order by ... [asc | desc];指定某个列进行排序,其中asc即ascending,代表升序;desc即descending,代表降序。
desc降序排列。
输入命令select 列 | 聚合函数 | * from 表 where ... group by ... order by ... [asc | desc] limit n[ , m];进行限制排序和分页,如果limit后只有n,则返回符合前置条件且排名前n条的数据。
limit后n和m都有,则显示符合前置条件的数据从第n+1条开始到第m条。
四.Python操作MySQL的基本方法
1.连接MySQL
要用Python操作MySQL储存我们爬取的数据,必须要用到一个名为pymysql的第三方库,按win+R输入cmd打开终端,输入命令pip install pymysql进行安装,然后进行后续操作。
安装完成后我们就可以用python与MySQL数据库进行基础的连接,注意当前项目文件名不能出现pymysql,否则会报错!
2.执行SQL语句
在Python代码中写SQL语句时可以末尾可以不加分号,但在可视化界面或MySQL环境中必须加分号!
a.执行非查询性质的SQL语句
在Python中我们需要游标对象来执行SQL语句,因此我们要先用连接对象来实例化游标对象,并用连接对象选择目标数据库,然后就可以在游标对象.execute(" ")中写SQL语句了,且这里SQL语句一定要加引号。
b.执行查询性质的SQL语句
由于查询性质的SQL语句我们需要接收查询的结果,所以写法略有不同。需要先用游标对象获取查询结果,再用一个变量接收这个结果,该结果是一个双层嵌套的元组。
c.执行数据插入
通过Python往MySQL数据库插入数据时,需通过commit确认插入,否则运行后数据库内数据也不会发生改变,如不想手动进行插入,可在连接对象中设置自动插入。
输入连接对象.commit()确认数据插入。
在连接对象conn中设置autocommit = True实现自动提交,后面所有的插入语句都无需手动确认。