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…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...