乐之之

知而行乐,乐而行之,天道酬勤,学无止境。
MySQL

 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="*****",
    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()

结果:

posted on 2022-11-13 18:20  乐之之  阅读(8)  评论(0编辑  收藏  举报