MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
一、安装和登录MySQL
(一)安装MySQL
1、下载
下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 F:\MySQL\mysql-8.0.11 下。
2、配置文件
-
打开刚刚解压的文件夹F:\MySQL\mysql-8.0.11 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息。
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=F:\MySQL\mysql-8.0.11
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=F:\MySQL\\sqldata
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
3、启动数据库
-
以管理员身份打开 cmd 命令行工具,切换目录:
-
初始化数据库,输入以下指令。
mysqld --initialize --console
执行完成后,会输出 root 用户的初始默认密码,如:
2018-04-20T02:35:05.464644Z 5 [Note] [MY-010454] [Server] A temporary password is
generated for root@localhost: APWCY5ws&hjQ
APWCY5ws&hjQ 就是初始密码,后续登录需要用到,你也可以在登陆后修改密码。
- 修改密码的两种方式:
mysql> alter user '用户名'@'localhost' identified by '123456'; #方式一
mysql> alter user USER() identified by '123456'; #方式二
- 安装数据库
mysqld install
- 启动服务
net start mysql
运行之后,也可通过cmd输入指令services.msc---本地服务设置,来查看MySQL是否运行。MySQL会一直处于运行状态,若使用,直接管理员命令cmd进入即可。
(二)登录MySQL
当 MySQL 服务已经运行时, CD到bin目录,打开命令提示符, 输入以下格式的命名:
mysql -h 主机名 -u 用户名 -p
-
-h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
-
-u : 登录的用户名;
-
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
登陆成功之后就会显示以下界面:
二、数据库的操作
(一)查看数据库
语法:
show databases; # 注意后面的;为英文符号
(二)创建数据库
语法:
create database 库名;
(三)删除数据库
语法:
drop database 库名;
(四)选择数据库
语法:
use 库名;
三、数据表的操作
(一)创建数据表
创建MySQL数据表需要以下信息:
-
表名
-
表字段名
-
定义每个表字段类型
create table 表名(
ID int auto_increment,
表字段名 类型,
表字段名 类型,
表字段名 类型,
)DEFAULT CHARSET=utf8;
MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型
(二)删除数据表
语法:
drop table 表名;
-
清空表数据
truncate table 表名
truncate只会清除表数据,drop不光清除表数据还要删除表结构。
delete from 表名 where id='1';
delete from 表名;
如果不加where条件,则是删除表所有的数据
(三)插入数据
语法:
insert into 表名(name1,name2,name3) values (data1,data2,data3)
如果数据是字符型,必须使用单引号或者双引号,如:"data"。
(四)查询数据
语法:
select * from 表名;
# 查看表中的所有数据
select name from 表名;
# 查看指定数据
desc 表名:
# 查看表结构
四、数据库的连接
-
python与MySQL交互
-
安装第三方模块--pymysql
-
pip install pymysql
(一)pycharm链接MySQL
import pymysql
# 创建链接
db = pymysql.Connect(
host="127.0.0.1",
port=3306,
user="root",
password="xh1234",
db="spider_data"
)
# 创建游标,用于传递python给MySQL的命令和MySQL返回的内容
cursor = db.cursor()
(二)数据库插入操作
# -*- coding:utf-8 -*-
import pymysql
db = pymysql.Connect(
host="127.0.0.1",
port=3306,
user="root",
password="填写密码*****",
db="text"
)
# 创建游标,用于传递python给MySQL的命令和MySQL返回的内容
cursor = db.cursor()
# SQL插入语句
sql = "insert into student(name, age, sex) values ('李四',20,'男')"
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
五、案例示例
(一)创建mysql文件
文件内在原有的库里,创建一个表。
create table caipu(
id int auto_increment,
title varchar(100),
major varchar(100),
score varchar(100),
primary key (id)
)default charset =utf8;
desc caipu;
(二)爬取代码加入pymysql语句
1、在基础属性中创建连接数据库。
self.db=pymysql.Connect(
host="127.0.0.1",
port=3306,
user="root",
passwd="**************",
db="demo"
)
self.cursor = self.db.cursor()
2、在数据解析中将数据循环提交至数据库。
sql = "insert into caipu (title,major,score) values (%s,%s,%s)"
params = [(title,major,score)]
self.cursor.executemany(sql,params)
self.db.commit()
(三)完整代码示例
import requests
from lxml import etree
import pymysql
class DouGUO(object):
def __init__(self,num):
self.url = f"https://www.douguo.com/caipu/%E5%AE%B6%E5%B8%B8%E8%8F%9C/0/{num}"
self.headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.26"
}
self.db=pymysql.Connect(
host="127.0.0.1",
port=3306,
user="root",
passwd="***********",
db="demo"
)
self.cursor = self.db.cursor()
'''发起请求并获取数据'''
def get_data_index(self):
resp = requests.get(self.url,headers=self.headers)
if resp.status_code==200:
return resp.text
else:
return None
"""数据解析"""
def parse_data_index(self,resp):
# first 创建对象
html = etree.HTML(resp)
# 捕获异常
try:
data_list = html.xpath('//ul[@class="cook-list"]//li')
# 单独拿出每一个数据进行解析
for data in data_list:
# 精确提取数据
title = data.xpath("./a/@title")[0] # 获取标题
major = data.xpath("./div/p/text()")[0] # 获取配料
score = data.xpath("./div/div/span[2]/text()")[0] # 获取评分
sql = "insert into caipu (title,major,score) values (%s,%s,%s)"
params = [(title,major,score)]
self.cursor.executemany(sql,params)
self.db.commit()
except IndexError:
pass
"""实现整个代码的业务逻辑"""
def run(self):
resp = self.get_data_index()
self.parse_data_index(resp)
if __name__ == '__main__':
for num in range(4):
spider = DouGUO(num*20)
spider.run()
结果: