Python3.x PyMySQL、JSON、requests模块

一、PyMySQL

1 准备数据库

  1. 安装 mariadb-server
  2. 启动服务
  3. 创建名为 tedu1 的数据库【utf8】
[root@localhost ~]# yum -y install gcc
[root@localhost ~]# yum -y install mariadb-server
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# systemctl enable mariadb
[root@localhost ~]# ss -ntulp | grep mysql
[root@localhost ~]# mysql		
MariaDB [(none)]> CREATE DATABASE tedu1 DEFAULT CHARSET utf8;  # 创建数据库tedu1, 指定字符集为utf8【数据库命令不区分大小写】

2 PyMySQL 模块应用

2.1 连接数据库

创建连接是访问数据库的第一步

import pymysql
conn = pymysql.connect(
    host='127.0.0.1', 
    port=3306, 
    user='root',
    db='tedu1', 
    charset='utf8'
)

2.1 游标

  • 游标(cursor)就是游动的标识

  • 通俗的说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行

cur = conn.cursor()  # 创建游标【对数据库进行增删改查】

2.3 创建表

# 建立部门表,员工表,工资表
# 定义创建departments【部门表】sql命令
create_dep = '''CREATE TABLE departments(
	dep_id INT, dep_name VARCHAR(50)
)'''
cur.execute(create_dep)  # 执行sql语句create_dep

2.4 插入数据

对数据库表做修改操作,必须要 commit

#向部门表中插入数据
insert_dep = 'INSERT INTO departments VALUES (%s, %s)'	# 定义插入数据的变量,%s为占位符
cur.execute(insert_dep, (1, '人事部'))  # 执行sql语句insert_dep, 插入一条记录
cur.executemany(  # executemany(), 执行sql语句insert_dep, 同时插入多条记录
    insert_dep, 
    [(2, '运维部'), (3, '开发部'), (4, '测试部'), (5, '财务部'), (6, '市场部')]
)
conn.commit()

2.5 查询数据

可以取出表中一条、多条或全部记录

sql4 = "SELECT * FROM departments"
cur.execute(sql4)
result = cur.fetchone()
print(result)

result2 = cur.fetchmany(2)
print(result2)

result3 = cur.fetchall()
print(result3)

2.6 修改数据

通过 update 修改某一字段的值

# 更新部门表【departments】中的数据
update_dep = 'UPDATE departments SET dep_name=%s WHERE dep_name=%s'
cur.execute(update_dep, ('人力资源部', '人事部'))
conn.commit()

2.7 删除记录

通过 delete 删除记录

#删除部门表【departments】中的id为6的数据
del_dep = 'DELETE FROM departments WHERE  dep_id=%s'
cur.execute(del_dep, (6,))
conn.commit()

2.8 提交写请求和关闭资源


conn.commit()
cur.close()
conn.close()

练习 :员工表 (EMPLOYEE) 相关操作

需求

  1. 员工表有 FIRST_NAME VARCHAR(20),LAST_NAME VARCHAR(20),AGE INT,SEX VARCHAR(1),INCOME FLOAT字段
  2. 使用 PyMySQL 创建该表
  3. 使用 PyMySQL 添加以下三条数据
    1. ‘Mac’, ‘A’, 20, ‘M’, 20000
    2. ‘Tom’, ‘B’, 20, ‘F’, 30000
    3. ‘Bob’, ‘C’, 20, ‘M’, 40000
  4. 使用 PyMySQL 查询所有用户信息,并打印结果
  5. 将 FIRST_NAME 为 Mac 的用户工资改成 10000
  6. 删除 FIRST_NAME 为 Tom 的用户信息
import pymysql
# 1.创建连接
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    db='tedu1',
    charset='utf8'
)
# 2.游标
cur = conn.cursor()
# --------------------3.1 创建表-----------------------
# creat_employee = "create table employee(FIRST_NAME VARCHAR(20),LAST_NAME VARCHAR(20),AGE INT,SEX VARCHAR(1),INCOME FLOAT);"
# cur.execute(creat_employee)
# --------------------3.2 添加数据----------------------
# insert_employee = "insert into employee values(%s , %s , %s , %s , %s) ;"
# cur.executemany(insert_employee, [("Mac","A",20,"M",20000),('Tom', 'B', 20, 'F', 30000),('Bob', 'C', 20, 'M', 40000)])
# --------------------3.3 查询-------------------------
select_employee = "select * from employee;"
cur.execute(select_employee)
print(cur.fetchall())
# --------------------3.4 更新数据----------------------
update_employee = " update employee set INCOME = %s  where FIRST_NAME = %s;"
cur.execute(update_employee,(10000,"Mac"))
# -------------------3.5 删除数据-----------------------
delete_employee = " delete from employee where FIRST_NAME = %s;"
cur.execute(delete_employee,("Tom",))
# 4.提交写请求和关闭资源
conn.commit()
cur.close()
conn.close()

二、JSON

1 概念

JSON 是一种轻量级的数据交换格式。

2 理解

数据交换格式那么多,为啥还要学个 JSON?

在这里插入图片描述

数据交换格式是不同平台、语言中进行数据传递的通用格式。比如 PythonJava 之间要对话,你直接传递给 Java 一个 dict 或 list 吗?Java 会问,这是什么鬼?虽然它也有字典和列表数据类型,但两种字典不是一个“物种”,根本无法相互理解。这个时候就需要用 Json 这种交换格式了,PythonJava 都能理解 Json。那么别的语言为什么能理解 Json 呢?因为这些语言都内置或提供了 Json 处理模块,比如 Pythonjson 模块。

3 基本用法

JSON格式: 在各种语言中,都可以被读取,被用作不同语言的中间转换语言【类似翻译器】

3.1 主要结构

  • “键/值” 对的集合;python 中主要对应 字典

  • 值的有序列表;在大部分语言中,它被理解为 数组

PythonJSON
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull

3.2 常用函数

  • loads 方法:对编码后的 json 对象进行 decode 解密,得到原始数据,需要使用的 json.loads() 函数

  • **dumps 方法:**可以将原始数据转换为 json 格式

案例

[root@localhost xxx]# python3
>>> import json  # 导入json模块
>>> adict = {'user': 'tom', 'age': 20}  # 定义字典adict
>>> data = json.dumps(adict)  # dumps(),将字典转换为json格式【字符串类型】,赋值给变量data
>>> data  # 查看变量的内容,字符串
>>> type(data)  # 查看变量data的数据类型,为字符串类型
>>> data = json.loads(data)  # l将json格式【字符串类型】转换为字典,赋值给变量data
>>> data  # 查看变量data的值,字典
>>> type(jdata)  # 查看jdata的数据类型,为字典类型

三、requests 模块

1 requests 简介

  1. requests 是用 Python 语言编写的、优雅而简单的 HTTP 库

  2. requests 内部采用来 urillib3

  3. requests 使用起来肯定会比 urillib3 更简单便捷

  4. requests 需要单独安装

2 GET 和 POST

  • 通过 requests 发送一个 GET 请求,需要在 URL 里请求的参数可通过 params 传递
  • 与 GET 不同的是,POST 请求新增了一个可选参数 data,需要通过 POST 请求传递 body 里的数据可以通过 data 传递

2.1 requests 发送 GET 请求

案例 1:处理文本数据
[root@localhost xxx]# pip3 install requests  # 安装requests软件包
# 使用requests处理文本数据,使用text查看【get】
[root@localhost xxx]# python3
>>> import requests  # 导入requests模块
>>> url = 'http://www.163.com'	# 声明变量,定义要操作的网页
>>> r = requests.get(url)  # 请求,获取网页内容,赋值给变量r
>>> r.text  # 查看网页内容,因为是文本类型的,采用text查看
案例 2:处理图片视频音频等数据
>>> url2 = 'http://pic1.win4000.com/wallpaper/6/58f065330709a.jpg'  # 声明变量,定义查看的图片
>>> r2 = requests.get(url2)  # 请求,获取bytes类型的图片数据,赋值给变量r
>>> r2.content  # 查看图片内容,因为是图片类型的,采用content查看
>>> with open('/tmp/aaa.jpg', 'wb') as fobj:  # 将图片数据保存在文件aaa.jpg中
...     fobj.write(r2.content)
[root@localhost xxx]# eog /tmp/aaa.jpg 		#在终端使用eog打开图片aaa.jpg
案例 3:处理 json 格式的数据

天气预报查询

  • 搜索 中国天气网 城市代码查询, 查询城市代码
  • 城市天气情况接口
    • 实况天气获取: http://www.weather.com.cn/data/sk/城市代码.html
    • 城市信息获取:http://www.weather.com.cn/data/cityinfo/城市代码.html
    • 详细指数获取:http://www.weather.com.cn/data/zs/城市代码.html
>>> url3 = 'http://www.weather.com.cn/data/sk/101130101.html'  # 声明变量,指定乌鲁木齐城市天气的网页路径
>>> r3 = requests.get(url3)  # 请求,获取bytes类型的图片数据,赋值给变量r
>>> r3.json()  # json(), 查看json类型的数据,乱码【字符集错误】
>>> r3.encoding  # 查看获取网页数据的字符集
'ISO-8859-1'
>>> r3.encoding = 'utf8'  # 将网页数据,转换为'utf8'格式
>>> r3.json()  # json(), 查看json类型的数据【utf8】

2.2 设定头部

  • 用户也可以自己设定请求头
  • 获取网站的【User-Agent】请求头信息

在这里插入图片描述在这里插入图片描述

# 用户自己设定请求头,查看Forbidden禁止访问的网站(反爬--让爬虫穿上浏览器的衣服)
[root@localhost xxx]# python3
>>> js_url = 'http://www.jianshu.com'				#声明变量,指定简书的网站
>>> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}					#声明访问网站的请求头
>>> r = requests.get(js_url, headers=headers)		#获取简书网页数据, 自定义请求头
>>> r.text			#以文本的方式,查看数据内容【Forbidden 简书网站进行了反爬虫设置】

2.3 请求参数

  • 当访问一个 URL 时,我们经常需要发送一些查询的字段作为过滤信息,例如:httpbin.com/get?key=val,这里的 key=val 就是限定返回条件的参数键值对
  • 当利用 python 的 requests 去发送一个需要包含这些参数键值对时,可以将它们传给params
import requests
headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}
# 这是目标url
# url = 'https://www.baidu.com/s?wd=python'
url = 'https://www.baidu.com/s?'
# 请求参数是一个字典 即wd=python
kw = {'wd': 'python'}
# 带上请求参数发起请求,获取响应
response = requests.get(url, headers=headers, params=kw)
print(response.text)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值