PyMysql 01|(包含超详细项目实战)连接数据库、增删改查、异常捕获
目录
一、数据库操作应用场景
二、安装PyMysql
三、事务的概念
四、数据库的准备
五、PyMysql连接数据库
1、建立连接方法
2、入门案例
六、PyMysql操作数据库
1、数据库查询
1️⃣查询操作流程
2️⃣cursor游标
3️⃣查询常用方法
4️⃣案例
5️⃣异常捕获
2、数据库UID
1️⃣更新操作流程
2️⃣案例:增删改操作
一、数据库操作应用场景
1、校验测试数据
- 接口发送请求后明确会对数据库中的某个字段进行修改,但响应结果中无该字段数据时。
⚪如ihrm 删除员工接口。 is_delete 字段没有在响应结果中出现! 需要借助数据库校验!
2、构造测试数据
- 测试数据使用一次就失效。
⚪如:ihrm 添加员工接口,使用的手机号!
- 测试前,无法保证测试数据是否存在。
⚪如:ihrm 查询员工接口,使用的员工id
二、安装PyMysql
pip install PyMySQL -i https://pypi.douban.com/simple/
操作步骤:
1. 导包 import pymysql
2. 创建连接。 conn = pymysql.connect(host,port, user, password, database, charset)
3. 获取游标。 cursor = conn.cursor()
4. 执行 SQL。 cursor.execute( ”sql语句“ )
查询语句(select)
处理结果集(提取数据:fetch*)
增删改语句(insert、update、delete)
成功:提交事务 conn.commit()
失败:回滚事务 conn.rollback()
5. 关闭游标。cursor.close()
6. 关闭连接。conn.close()
三、事务的概念
更详细的介绍:MySQL数据库04|内置函数、存储过程、视图、事务、索引-CSDN博客
- 事务,是关系型数据库(mysql)特有的概念。
- 事务,可以看做一个虚拟的容器,在容器中存放一系列的数据库操作,看做一个整体。内部的所有操作,要 么都一次性全部成功,只要有一个失败,就全部失败!
- 事务操作:只有 2 种情况
⚪提交:conn.commit()
⚪回滚: conn.rollback()
四、数据库的准备
参考资料:
博客资料:看第一部分中的SQL演练文章浏览阅读2.8k次,点赞2次,收藏21次。文章目录前言# 第一部分:数据库练习准备数据创建数据表插入数据SQL演练1. SQL语句的强化2. 创建"商品分类"表3. 同步表数据4. 创建“商品品牌表”表5. 同步数据6. 修改表结构7. 外键外键取消外键:其实在设计定义数据库的时候,就已经确定了要不要使用外键:比如下面的逻辑。8. 其实就是多创建一个表,然后从原来的表上使用外键进行关联:下面代码可以一次性复制粘贴进行联系# 第二部分:Python 操作 MySQL1. 初尝python与mysql交互2. pymysql查询数据库、面向对象3. p_python mysql数据库练习https://blog.csdn.net/haojie_duan/article/details/122760852
github代码:看第7部分的2和3MySQL学习. Contribute to wmh02240/MySQL-Notes development by creating an account on GitHub.https://github.com/wmh02240/MySQL-Notes/tree/master/MySQL%E5%9F%BA%E7%A1%80/7.MySQL%E4%B8%8EPython%E4%BA%A4%E4%BA%92
视频资料:【数据库查询】11-数据库设计_哔哩哔哩_bilibili【数据库查询】11-数据库设计是【python教程】MySQL数据库的第20集视频,该合集共计36集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/av56919275?vd_source=6069c4cff3b2c943460de92f0c37ea38&spm_id_from=333.788.videopod.episodes&p=20
五、PyMysql连接数据库
1、建立连接方法
conn = pymysql.connect(host="", port=0,
user="", password="", database="", charset="")
host:数据库所在主机 IP地址 - string
port:数据库使用的 端口号 - int
user:连接数据库使用的 用户名 - string
password:连接数据库使用的 密码 - string
database:要连接的那个数据库的名字 - string
charset:字符集。常用 utf8 - string
conn:连接数据库的对 象。
2、入门案例
查询数据库,获取MySQL服务器 版本信息
# 1. 导包
import pymysql# 2. 建立连接
conn = pymysql.connect(host="localhost", port=3306, user="root",password="123456", database="jingdong", charset="utf8")# 3. 获取游标
cursor = conn.cursor()# 4. 执行 sql 语句(查询)
cursor.execute("select version()")# 5. 获取结果
res = cursor.fetchone()
print("res =", res[0])# 6. 关闭游标
cursor.close()# 7. 关闭连接
conn.close()
六、PyMysql操作数据库
- 查询语法
select 字段1,字段2,... from 表 where 条件;示例:select id,title, pub_date from t_book where title = '读者';
- 添加语法
insert into 表名(字段1, 字段2, ...) values(值1, 值2, ...);示例:insert into t_book(id, title, pub_date) values(17, '红楼梦', '2021-11-11');
- 更新语法
update 表名 set 字段名 = 字段值 where 条件示例:update t_book set title = '三国' where id = 17;
- 删除语法
delete from 表名 where 条件示例:delete from t_book where title = '三国';
1、数据库查询
1️⃣查询操作流程
2️⃣cursor游标
3️⃣查询常用方法
- fetchone():从结果集中,提取一行。
- fetchmany(size):从结果集中,提取 size 行。
- fetchall():提取所有结果集。
以上三个方法取得的结果都和游标的位置有关,都是从游标的下一个位置开始提取行。
- 属性rownumber:可以设置游标位置。想让游标回到起始位置的话,设置其为0即可。
4️⃣案例
查询goods表,获取第一条数据
查询goods表,获取前两条数据
查询goods表,获取全部数据
查询goods表,获取第3条和第4条 数据
# 1. 导包
import pymysql# 2. 建立连接
conn = pymysql.connect(host="localhost", port=3306, user="root",password="123456", database="jingdong", charset="utf8")# 3. 获取游标
cursor = conn.cursor() # 指向 0 号位置。# 4. 执行 sql 语句(查询)--- goods
cursor.execute("select * from goods;")# 5. 获取结果 - 提取第一条
res1 = cursor.fetchone()
print("res1 =", res1)# 修改游标位置:回零
cursor.rownumber = 0
# 5. 获取结果 - 提取前 2 条
res2 = cursor.fetchmany(2)
print("res2 =", res2)# 修改游标位置:回零
cursor.rownumber = 0
res3 = cursor.fetchall()
print("res3 =", res3)# 修改游标位置:指向第 2 条记录
cursor.rownumber = 2
res4 = cursor.fetchmany(2)
print("res4 =", res4)# 6. 关闭游标
cursor.close()# 7. 关闭连接
conn.close()
5️⃣异常捕获
try:尝试执行的代码
except Exception as err:有错误出现时,执行的代码
finally:无论有没有错误,都会执行的代码
# 1. 导包
import pymysql# 定义全局变量,初值为 None
conn = None
cursor = Nonetry:# 2. 建立连接conn = pymysql.connect(host="localhost", port=3306, user="root",password="123456", database="jingdong", charset="utf8")# 3. 获取游标cursor = conn.cursor() # 指向 0 号位置。# 4. 执行 sql 语句(查询)--- goodscursor.execute("select * from goods;")# 5. 获取结果 - 提取第一条res1 = cursor.fetchone()print("res1 =", res1)# 修改游标位置:回零cursor.rownumber = 0# 5. 获取结果 - 提取前 2 条res2 = cursor.fetchmany(2)print("res2 =", res2)# 修改游标位置:回零cursor.rownumber = 0res3 = cursor.fetchall()print("res3 =", res3)# 修改游标位置:指向第 2 条记录cursor.rownumber = 2res4 = cursor.fetchmany(2)print("res4 =", res4)except Exception as err:print("查询语句执行出错:", str(err))finally:# 6. 关闭游标cursor.close()# 7. 关闭连接conn.close()
2、数据库UID
1️⃣更新操作流程
2️⃣案例:增删改操作
单独实现如下操作:
①:新增一条商品数据
②:把商品id为22的商品名称name改为“修改后修改后xxxxx”
③:删除商品id为22的商品
【补充】pymysql中,事务的开始通常是隐式的。也就是说,当你第一次执行 INSERT
、UPDATE
或 DELETE
等操作时,数据库会自动为你启动一个事务,而你不需要显式调用 begin
来开始事务。
插入数据:
"""
新增一条商品数据
insert into goods values (0,'测试测试测试英寸笔记本',1,1,'2999',default,default);
【注意】插入的第3和4列数据有外键约束,必须得是有效的数据,能和另一个表的主键对应上
1. 导包
2. 创建连接
3. 获取游标
4. 执行 insert 语句
5. 提交/回滚事务
6. 关闭游标
7. 关闭连接
"""# 1. 导包
import pymysql# 定义全局变量
conn = None
cursor = Nonetry: # 2. 创建连接 conn=pymysql.connect(host="localhost", port=3306, user="root",password="123456", database="jingdong", charset="utf8") # 3. 获取游标 cursor = conn.cursor()# 4. 执行 insert 语句cursor.execute("insert into goods values (0,'测试测试测试英寸笔记本',1,1,'2999',default,default);")# 查看 sql执行,影响多少行 print("影响的行数:", conn.affected_rows())# 5. 提交事务 conn.commit()except Exception as err: print("插入数据错误:", str(err)) # 回滚事务 conn.rollback()finally: # 6. 关闭游标 cursor.close() # 7. 关闭连接 conn.close()
修改数据:
"""
把商品id为22的商品名称name改为“修改后修改后xxxxx”
update goods set name='修改后修改后英寸笔记本' where id=22;1. 导包
2. 建立连接
3. 获取游标
4. 执行 update语句
5. 提交、回滚事务
6. 关闭游标
7. 关闭连接
"""import pymysqlconn = None
cursor = None
try:conn = pymysql.connect(host="localhost", port=3306, user="root",password="123456", database="jingdong", charset="utf8")cursor = conn.cursor()cursor.execute("update goods set name='修改后修改后英寸笔记本' where id=22;")print("影响的行数:",conn.affected_rows())conn.commit()except Exception as err:print("修改数据操作出错:",str(err))conn.rollback()finally:cursor.close()conn.close()
删除数据:
"""
删除id为22的商品信息
delete from goods where id=22;1. 导包
2. 建立连接
3. 获取游标
4. 执行 delete 语句
5. 提交、回滚事务
6. 关闭游标
7. 关闭连接
"""import pymysqlconn = None
cursor = None
try:conn = pymysql.connect(host="localhost", port=3306, user="root",password="123456", database="jingdong", charset="utf8")cursor = conn.cursor()cursor.execute("delete from goods where id=22;")print("影响的行数:",conn.affected_rows())conn.commit()except Exception as err:print("删除数据操作出错:",str(err))conn.rollback()finally:cursor.close()conn.close()
全部内容:
PyMysql 01|(包含超详细项目实战)连接数据库、增删改查、异常捕获-CSDN博客
PyMysql 01|(包含超详细项目实战)数据库工具类封装-CSDN博客
相关文章:

PyMysql 01|(包含超详细项目实战)连接数据库、增删改查、异常捕获
目录 一、数据库操作应用场景 二、安装PyMysql 三、事务的概念 四、数据库的准备 五、PyMysql连接数据库 1、建立连接方法 2、入门案例 六、PyMysql操作数据库 1、数据库查询 1️⃣查询操作流程 2️⃣cursor游标 3️⃣查询常用方法 4️⃣案例 5️⃣异常捕获 …...

Android14上使用libgpiod[gpioinfo gpioget gpioset ...]
环境 $ cat /etc/os-release NAME="Ubuntu" VERSION="20.04.5 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.5 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="…...

网络安全 信息收集入门
1.信息收集定义 信息收集是指收集有关目标应用程序和系统的相关信息。这些信息可以帮助攻击者了解目标系统的架构、技术实现细节、运行环境、网络拓扑结构、安全措施等方面的信息,以便我们在后续的渗透过程更好的进行。 2.收集方式-主动和被动收集 ①收集方式不同…...
修改sshd默认配置,提升安全
对于Linux服务器,特别是暴露在公网的服务器,会经常被人扫描、探测和攻击。包括通过ssh访问登录攻击。对此,对默认的sshd配置进行调整,提升安全。 下面以CentOS 7.9为例说明: 一、常见安全措施 以root用户编辑vim /e…...
Clojure语言的面向对象编程
Clojure语言的面向对象编程 引言 Clojure是一种现代的Lisp方言,它特别强调函数式编程,Immutable数据结构和强大的并发能力。然而,很多人可能会问:Clojure支持面向对象编程吗?虽然Clojure没有像Java或C那样的传统类和…...

spring boot启动源码分析(三)之Environment准备
上一篇《spring-boot启动源码分析(二)之SpringApplicationRunListener》 环境介绍: spring boot版本:2.7.18 主要starter:spring-boot-starter-web 本篇开始讲启动过程中Environment环境准备,Environment是管理所有…...

MySQL复习
基础篇 InnoDB、MyISAM 和 MEMORY 存储引擎的区别? 主要区别: 为什么MySQL选择 InnoDB 作为默认存储引擎? 1.innodb支持事务,myisam、memory不支持。 2.innodb支持行级锁,可以使多个事务同时访问不同的行…...
ASP.NET Core 实现微服务 -- Polly 服务降级熔断
在我们实施微服务之后,服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理࿱…...

服务器漏洞修复解决方案
漏洞1、远程桌面授权服务启用检测【原理扫描】 Windows Remote Desktop Licensing Service is running: Get Server version: 0x60000604 1、解决方案:建议禁用相关服务避免目标被利用 方法一:使用服务管理器 打开“运行”对话框(WinR&am…...

“AI智慧组卷系统:让考试变得更简单、更公平!
大家好,我是一名资深的产品经理,今天咱们就来聊聊教育领域的一款黑科技产品——AI智慧组卷系统。在这个信息技术飞速发展的时代,AI技术已经渗透到了我们生活的方方面面,教育行业也不例外。下面我就用大白话给大家介绍一下这个AI智…...

MT6706BL 同步整流 规格书
MT6706BL 是用于反激式变换器的高性能 65V 同步整流器。MT6706BL兼容各种反激转换器类型。MT6706BL 支持 DCM、CCM 和准谐振模式。MT6706BL 集 成 了 一 个 65V 功 率MOSFET,可以取代肖特基二极管,提高效率。V SW <V TH-ON 时,MT6706BL 内…...

vue el-table 数据变化后,高度渲染问题
场景:el-table设置了height属性,但是切换查询条件后再次点击查询重新获取data时,el-table渲染的高度会有问题,滚动区域变矮了。 解决办法:使用doLayout方法,在表格数据渲染后调用doLayout方法可以重新布局…...
前端多语言
前端多语言目前常用i18n实现 一、react 1.安装依赖 npm install react-i18next i18next --save2.创建配置文件 src/i18n config.ts:对 i18n 进行初始化操作及插件配置 en.json:英文语言配置文件 zh.json:中文语言配置文件 config.ts im…...

人工智能-机器学习之多元线性回归(项目实践一)
目标:运用scikit-learn进行多元线性回归方程的构建,通过实际案例的训练集和测试集进行预测,最终通过预测结果和MSE来评估预测的精度。 一、首先安装scikit-learn:pip install scikit-learn C:\Users\CMCC\PycharmProjects\AiPro…...
后台定时查杀进程策略
2019年做的一个500元价位内手机后台定时查杀的功能策略,现在2025年了回过头看,确实已经不适用了。现在进程管控大部分是不杀进程的方式了,类似冻结(类似苹果的墓碑机制),而杀进程策略主要是场景式异常查杀了,例如明显性…...
Objective-C语言的学习路线
Objective-C语言的学习路线 在程序开发的历史长河中,Objective-C作为一种继承自C语言与Smalltalk的编程语言,扮演着重要的角色。虽然随着Swift语言的出现,Objective-C的使用有所减少,但它依然是iOS和macOS应用开发的重要基础&…...

宁德时代2025年Verify入职测评语言理解及数字推理真题SHL题库汇总、考情分析
宁德时代社招Verify入职测评对薪酬有着重要影响,其规定正确率达到80%才能顺利通过测评。这体现了公司对人才专业素养与能力的严格要求,旨在筛选出真正符合岗位需求的优秀人才。测评内容涵盖了专业知识、技能运用、逻辑思维等多方面,只有综合能…...

【Spring】注入方式
介绍 在Spring框架中,依赖注入(Dependency Injection, DI)是实现控制反转(Inversion of Control, IoC)的核心机制。 除了通过XML配置的注入方式(已逐渐被淘汰),Spring还支持多种基…...
Python 中的作用域:规则与应用
在 Python 编程中,作用域(Scope) 是指一个变量可以被访问和引用的范围。作用域与变量的生命周期密切相关,决定了变量何时被创建、何时被销毁以及在哪些地方可以使用它。理解作用域对于编写清晰、可维护的代码至关重要。 Python 中…...
T-SQL语言的字符串处理
T-SQL语言的字符串处理 引言 在数据库管理和应用开发中,我们经常需要对字符串进行处理。字符串的处理包括查找、替换、分割、拼接以及格式化等操作,而这些操作在SQL Server中可以通过T-SQL(Transact-SQL)来实现。T-SQL是微软SQL…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...