Pymysql介绍及其增删改查
学习目标
能够自己动手将对应的数据导入到数据库
知道外键约束的作用
了解E-R模型的组成部分
能够举例说出生活中 1对1 1对多 多对多关系的例子
知道一个表结构设计是否满足范式的要求
能够说出 python 操作数据库的步骤
能够 connect 方法创建连接对象
能够使用连接对象的 cursor()方法 创建游标对象
能够使用游标对象的 execute()方法执行 SQL 语句
能够使用游标对象的 close()方法关闭游标对象
能够使用连接对象的 close()方法关闭连接对象
能够使用游标对象的 fetchall()方法取出所有数据
能够使用游标对象的 fetchone()方法取出一条数据
能够说出如何避免 SQL 注入问题
数据准备
1. 数据准备
创建数据表
插入数据
2. SQL语句强化
查询类型cate_name为 '超极本' 的商品名称、价格
显示商品的种类
求所有电脑产品的平均价格,并且保留两位小数
显示每种商品的平均价格
查询每种类型的商品中 最贵、最便宜、平均价、数量
查询所有价格大于平均价格的商品,并且按价格降序排序
分表操作
学习目标
能够把一个表中的数据放到多个表中
1. 分表操作步骤
问题表

由于只存在商品信息一张表 其中既有商品信息又有分类名称和品牌名称。当把某个商品信息删除后,本不应该删除的<独立于商品信息的分类和品牌>等信息结果也随着删除商品信息而删除,那么此时存在删除异常
解决方案

如图我们创建两张表 商品种类表 商品品牌表 存储对应的信息 就不会出现删除异常了
最终效果

有了这样的最终表,我们的商品种类和商品品牌信息就能独立保存起来
分表操作步骤
第一步: 创建商品种类表
第二步: 同步数据到商品种类表中
第三步: 更新商品信息表数据
第四步: 修改商品信息表表结构

2. 根据商品表中的分类信息创建分类表
创建 "商品分类"表
由于只存在一张表 其中既有商品信息又有分类名称和品牌名称。当把某种分类或者品牌的商品全部删除后,本不应该删除<独立于商品信息的分类和品牌>等信息结果也随着删除商品信息而删除,那么此时存在删除异常。
为解决删除异常问题,则必须再创建分类表和品牌表单独用来存储数据。
将分类信息导入到分类表中
查询goods表中商品的种类
将分组结果写入到goods_cates商品种类数据表
insert into goods_cates (name) select cate_name from goods group by cate_name;
将商品表中的分类名称更改为分类名称对应的分类id
通过goods_cates数据表来更新goods表
3. 根据商品表中的品牌信息创建品牌表
创建 "商品品牌表" 表并导入品牌名称
通过create table ...select来创建数据表并且同时写入记录,一步到位
使用商品品牌表中的信息更新商品表信息
通过goods_brands数据表来更新goods数据表
4. 修改商品表表结构
查看 goods 的数据表结构,会发现 cate_name 和 brand_name对应的类型为 varchar
通过alter table语句修改表结构
pymysql-查操作
学习目标
能够说出 python 操作数据库的步骤
能够 connect 方法创建连接对象
能够使用连接对象的 cursor()方法 创建游标对象
能够使用游标对象的 execute()方法执行 SQL 语句
能够使用游标对象的 close()方法关闭游标对象
能够使用连接对象的 close()方法关闭连接对象
1. pymysql模块的作用
问题: 如何使用客户端将100000行数据插入到数据库?
回答: 大家会发现如果用之前客户端几乎是不可能完全这个任务的, 因为我们不可能去构造出那个插入10w行数据的SQL. 可是,如果我们有一个功能能够插入一行数据,借助程序强大的特点-重复,就可以轻而易举的就将10w行数据收入麾下. 那么在Python中实现这样的操作可以使用pymysql这个模块完成.
2. Python 中操作 MySQL 步骤

操作步骤:
导入模块
创建连接
创建游标
执行sql
关闭游标
关闭连接
步骤详解:
引入模块
创建连接(创建connection连接对象)
作用: 用于建立与数据库的连接, 调用pymysql模块中的connect()方法.
创建游标(通过连接对象获取游标) 游标的作用: 执行sql语句(使用频度最高的语句为select、insert、update、delete)
获取游标对象
执行sql(这里需要使用游标执行sql语句)
通过游标执行sql
获取结果集中的一条数据
获取结果集中的所有数据
关闭游标
关闭连接
3. pymysql练习
总结
操作步骤:
导入模块
创建连接
创建游标
执行sql
关闭游标
关闭连接
pymysql-增删改操作
学习目标
- 能够使用游标对象完成数据库的增删改
1. 数据提交和数据回滚
数据提交commit
数据库中的基本操作: 增删改查. 上一个章节中我们知道如何完成对数据库中数据的获取其实也就是查, 比如获取一条数据或者获取所有数据等. 接下来我们学习下如何增删改.
注意:
查数据, 并不会对原有数据库中的数据造成影响. 而增删改这三个操作都会对原有数据库中的数据造成影响. 也就说查数据不会修改原有数据空中的数据, 而增删改会修改原有数据库中的数据.
当对原有数据库中数据有修改时需要使用
# commit()提交数据到数据库# 这里可以理解为 数据库询问是否确定修改数据 然后commit()就是确定修改的意思conn.commit()
数据回滚rollback()
当我们在使用pymysql对数据进行响应的操作时, 会有可能会有一些错误操作, 这是如果想要数据返回到最原始的状态可以使用数据回滚操作
注意:
数据回滚是需要在 commit() 之前才有效的, 也就是说数据还没有确定修改这时候使用数据回滚才是有效的
# 回滚数据到什么都没做的原始状态 即撤销刚刚所有的修改操作conn.rollback()
2. pymysql的增删改查操作
在掌握了数据提交commit后, 实际上pymysql的数据的增删改和数据的查就没有什么区别了, 这里仅仅是对sql语句进行修改即可, 其他的操作步骤和原先的查是一样的
总结
数据提交:
commit()
数据回滚
rollback()