python爬虫需要mysql_Python爬虫-MySQL

Python爬虫-MySQL

前言

在请求数据、提取数据后,我们还需要做什么呢?答案无疑是:存储数据。这之前,我们每一次都将数据保存在文本txt格式中,这没什么不可以的。但并不存在“各样问题最优解指向同一答案”。我们需要多掌握——至少也得是了解——主流存储数据的方法。

会以MySQL,MongDB,Redis顺序,以及其他这样的顺序一一介绍。然而我们并非担任“数据管理员”一职,所以介绍内容可能相对“简陋”,但我想够用就好,必要时动动手指找度娘!(并非我不用谷歌,是不想把你们“基佬”化)

三范式

MySQL的一种规范。说到它,我们应该立马在脑海里反应出“关系型数据”。

1. 第一范式:列不可以拆分

2. 第二范式:唯一标识(通过属性找到唯一对象)

3. 第三范式:引用主键(引用关系的时候只能引用主键)

每一个范式都建立在前一个范式的基础之上

常用字段类型

数字类型:int, decimal

字符串:char(固定长度,无数据自己补充), varchar(可变长度),text

关于三者的详细区别

日期:datetime

布尔:bit

约束

主键约束:primary key

非空:not null

唯一:unique

默认:default

外键:foreign key

SQL语句命令行

登陆操作

(同样,我仍不爱讲如何安装,因为安装环境才是最难环节有木有啊)

1. 启动数据库:win环境net start mysql;ubuntu环境service mysql start

2. 关闭数据库:win环境net stop mysql;ubuntu环境service mysql stop

3. 登陆数据库:mysql -u 用户 -p;远程登陆数据库:mysql -h ip地址 -u 用户 -p(远程连接需要设置,后面会讲)

用户操作

首次安装mysql后需要root账户登陆,密码为空,一般情况下,我们需要为root设置一下密码

1. alter user "root"@"localhost" identified by "newPassword";

2. 另一种修改密码方式:

set password for "username"@"localhost"=password("newPassword");

如果修改的是当前用户密码也可以:set password=password("newpassword");

==上面的localhost并非固定,需要看实际情况,但一般默认为localhost。查看方式:==

use mysql;使用名为mysql的数据库

select Host,User from user;显示user表中的Host,User字段

3. 一般不会直接root账户对数据库操作,所以创建普通用户:

create user "username"@"localhost" identified by "password"(localhost的意思是本地,如果需要远程访问,可以改为:%)

4. 为用户授权:

grant all on *.* to "username"@"loaclhost"(全部权限)

grant all privileges on databasename.tablename to "username"@"localhost"

(仅增删查改的权限,指定某个数据库的某个表)

5. 撤销权限:

revoke all privileges on databaseName.tableName from "user"@"localhost"

==撤销命令一定要对应授权语句,即:权限部分,针对数据必须一样,不然不起作用==

6. 查看授权语句:show grants for "username"@"%";

7. 删除用户:drop user "test"@"localhost";

数据库操作

退出:quit;或者exit;

显示时间:select now();

查看版本:select version()

创建数据库并且指定编码方式:create database 数据库名 charset=utf8;

删除数据库:drop database 数据库名;

切换数据库:use 数据库名;

查看当前使用数据库:select databse();

查看用户所有数据库名:show databases;

表操作

创建表:

create table 表名(id int auto_increment primary key not null,sname varchar(10) not null);表示创建一个表,有id字段,自增长型,主键,不为空;sname字段,varchar类型,限长10,不为空(不写not null默认可为空,且不能创建空表)

增加列表:alter table 表名 add 列名 数据类型;

修改列名:alter table 表名 change 旧列 新列 数据类型

如果仅仅修改数据类型,旧列和新列仍要写出来,写一样;或者另一种方法:

alter table 表名 modify 列名 数据类型;

修改表明:rename table 表名(旧) to 表名(新);

查看表的创建语句:show create table 表名;

查看表结构:desc 表名;

删除表:drop table 表名;

数据操作

增(insert)

a. 全列插入:insert into 表名 values(值1,值2...);

b. 缺省插入:insert into 表名(列1,列2...) values(值1,值2);

c. 同时插入多条数据:

insert into 表名 values(...),(...)...;

insert into 表名(...) values(...),(...)...;

==主键如果是自增长型,全列插入时需要占位,通常用0,插入成功后以实际数据为准==

删(delete)

a. 物理删除:delete from where 条件;

b. 逻辑删除:一般重要数据不做直接删除,可以添加列isdelete数据类型为bit,默认值0,如果删除对其赋值1

alter table 表名 add isdelete bit default 0;

查(select)

a. 条件查询:select * from 表名 where 条件;

b. 模糊查询:

select * from 表名 where 列名 like "黄%";

select * from 表名 where 列名 like "黄_";

d. 查询范围:

... where id in (1, 3, 5);id值为1,3, 5

...where id between 1 and 4;id值在1~4间,包括1,4

... where id is null;id值为0

e. 如果某列数据类型二进制,直接查询是不会显示

select isdelete+0 from...十进制显示

select bin(isdelete+0) from...二进制显示

select oct(isdelete+0) from...八进制显示

select hex(isdelete+0) from...十六进制显示

e. 综合:...where 条件A and 条件B ...;

==条件可以随意搭配,通过and,or连接,优先级:括号>not>比较运算符>逻辑运算符;and比or先运算==

改(update)

a. update 表名 set 列1=值1,... where 条件;

事务

什么是事务:一个业务需要多个操作时,如果有一个失败,那么看做全部失败。使用事物即可以退回到所有操作之前,使得数据不会受损

事务的四个特性(ACID):

a) 原子性(A):事务的操作不可分割,要么都执行,要么都不执行

b) 一致性(C):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致

c) 隔离性(I):事务的执行不受其他事务的干扰,产生的中间结果对于其他事务来说必须是透明的

d) 持久性(D):对于任意已提交的事务,系统必须保证该事务对数据的改变不被丢失,即使数据出现故障

==表的格式必须是innodb 或者 bdb,才可以对这个表使用事务==

查看表的创建语句:

show create table students;

修改表的类型:

alter table students engine=innodb;

事务语句:

a) begin 开始

b) commit 提交

c) rollback 回滚

与Python交互

导包:import pymysql

创建连接对象

conn = pymysql.connect(host="",port=3306, user="", password="",db="");

默认开启事务,对应方法:conn.commit()提交;rollback()回滚

创建光标对象

cursor = connect.cursor();

对象方法:

a. cursor.execute(sql)执行sql语句

b. cursor.fetchall()如果执行的是查询语句,fetchall()负责返回查询到的全部结果,返回元组类型

关闭光标以及数据库连接

cursor.close()

conn.close()

QQ音乐之体面

目标歌曲《体面》,热门评论4000条

虽然QQ音乐号称四千条,实际抓取下来只有3600+,我随机查看了一些接口,发现的确不可能四千条

关注点:

1. 注意数据来源,这次不是获取静态网页,而是通过chrome浏览器开发者工具找到热评的API接口

2. 数据库插入遇到表情符,修改编码格式为utf8md4

如果windows环境可以以下操作

a. 在mysql的安装目录下找到my.ini,做如下修改:

[mysqld]

character-set-server=utf8mb4

[mysql]

default-character-set=utf8mb4

修改后重启mySQL:net stop mysql ; net start mysql

b.将已经创建好的表也转换成utf8mb4

alter table 表名 convert to character set utf8mb4 collate utf8mb4_bin;

3. 数据库插入双引号报错问题

利用replace()替换,将所有英文双引号转义(\")

在最后

MySQL的操做远不止这些,但针对【爬虫】而言中,需要用到的操做以上应该足够,如果想深入,可以网上查询资料学习

利用pymysql模块可以动态创建数据库和数据表,但不建议这样做,应该提前在mysql中创建好

完整代码已上传GitHub,点击可查看。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值