PyMysql 01|(包含超详细项目实战)连接数据库、增删改查、异常捕获

news2025/3/1 3:51:39

目录

一、数据库操作应用场景

二、安装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.icon-default.png?t=O83Ahttps://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主,及时了解更多相关视频内容。icon-default.png?t=O83Ahttps://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 = None
 
try:
     # 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)
 
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中,事务的开始通常是隐式的。也就是说,当你第一次执行 INSERTUPDATEDELETE 等操作时,数据库会自动为你启动一个事务,而你不需要显式调用 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 = None

try:    
    # 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 pymysql

conn = 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 pymysql

conn = 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博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

了解Node.js

Node.js是一个基于V8引擎的JavaScript运行时环境,它允许JavaScript代码在服务器端运行,从而实现后端开发。Node.js的出现,使得前端开发人员可以利用他们已经掌握的JavaScript技能,扩展技能树并成为全栈开发人员。本文将深入浅出地…

Unreal Engine 5 (UE5) Metahuman 的头部材质

在图中,你展示了 Unreal Engine 5 (UE5) Metahuman 的头部材质部分,列出了头部材质的多个元素。以下是对每个部分的解释: 材质解释 Element 0 - MI_HeadSynthesized_Baked 作用: 这是 Metahuman 的主要头部材质,控制整…

《自动驾驶与机器人中的SLAM技术》ch7:基于 ESKF 的松耦合 LIO 系统

目录 基于 ESKF 的松耦合 LIO 系统 1 坐标系说明 2 松耦合 LIO 系统的运动和观测方程 3 松耦合 LIO 系统的数据准备 3.1 CloudConvert 类 3.2 MessageSync 类 4 松耦合 LIO 系统的主要流程 4.1 IMU 静止初始化 4.2 ESKF 之 运动过程——使用 IMU 预测 4.3 使用 IMU 预测位姿进…

SQL从入门到实战-2

高级语句 窗口函数 排序窗口函数 例题二十九 select yr,party,votes, rank() over (PARTITION BY yr ORDER BY votes desc) as pson from ge where constituency S14000021 order by party,yr 偏移分析函数 例题三十 select name,date_format(whn,%Y-%m-%d) data, confi…

Spring Security单点登录

本文介绍了Spring Security单点登录的概念和基本原理。单点登录是指用户只需登录一次,即可在多个相互信任的系统中实现无缝访问和授权。通过Spring Security框架的支持,可以实现有效的用户管理和权限控制。最后,本文提供了实际应用案例&#…

LKT4304新一代算法移植加密芯片,守护物联网设备和云服务安全

凌科芯安作为一家在加密芯片领域深耕18年的企业,主推的LKT4304系列加密芯片集成了身份认证、算法下载、数据保护和完整性校验等多方面安全防护功能,可以为客户的产品提供一站式解决方案,并且在调试和使用过程提供全程技术支持,针对…

浅谈云计算04 | 云基础设施机制

探秘云基础设施机制:云计算的基石 一、云基础设施 —— 云计算的根基![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1fb7ff493d3c4a1a87f539742a4f57a5.png)二、核心机制之网络:连接云的桥梁(一)虚拟网络边界&#xff…

Qt C++读写NFC标签NDEF网址URI

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1biFgjSs&ftt&id615391857885 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include "QLibrary" …

Java 如何传参xml调用接口获取数据

传参和返参的效果图如下&#xff1a; 传参&#xff1a; 返参&#xff1a; 代码实现&#xff1a; 1、最外层类 /*** 外层DATA类*/ XmlRootElement(name "DATA") public class PointsXmlData {private int rltFlag;private int failType;private String failMemo;p…

2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)

2024年度漏洞态势分析报告&#xff0c;需要访问自取即可!(PDF版本),大家有什么好的也可以发一下看看

不同音频振幅dBFS计算方法

1. 振幅的基本概念 振幅是描述音频信号强度的一个重要参数。它通常表示为信号的幅度值&#xff0c;幅度越大&#xff0c;声音听起来就越响。为了更好地理解和处理音频信号&#xff0c;通常会将振幅转换为分贝&#xff08;dB&#xff09;单位。分贝是一个对数单位&#xff0c;能…

Nginx反向代理请求头有下划线_导致丢失问题处理

后端发来消息说前端已经发了但是后端没收到请求。 发现是下划线的都没收到&#xff0c;搜索之后发现nginx默认request的header中包含’_’时&#xff0c;会自动忽略掉。 解决方法是&#xff1a;在nginx里的nginx.conf配置文件中的http部分中添加如下配置&#xff1a; unders…

C语言程序环境和预处理详解

本章重点&#xff1a; 程序的翻译环境 程序的执行环境 详解&#xff1a;C语言程序的编译链接 预定义符号介绍 预处理指令 #define 宏和函数的对比 预处理操作符#和##的介绍 命令定义 预处理指令 #include 预处理指令 #undef 条件编译 程序的翻译环境和执行环…

计算机组成原理(1)

系统概述 计算机硬件基本组成早期冯诺依曼机现代计算机 计算机各部分工作原理主存储器运算器控制器计算机工作过程 此文章的图片资源获取来自于王道考研 计算机硬件基本组成 早期冯诺依曼机 存储程序是指将指令以二进制的形式事先输入到计算机的主存储器&#xff0c;然后按照…

基于element UI el-dropdown打造表格操作列的“更多⌵”上下文关联菜单

<template><div :class"$options.name"><el-table :data"tableData"><el-table-column type"index" label"序号" width"60" /><!-- 主要列 BEGIN---------------------------------------- --&g…

Oracle 表分区简介

目录 一. 前置知识1.1 什么是表分区1.2 表分区的优势1.3 表分区的使用条件 二. 表分区的方法2.1 范围分区&#xff08;Range Partitioning&#xff09;2.2 列表分区&#xff08;List Partitioning&#xff09;2.3 哈希分区&#xff08;Hash Partitioning&#xff09;2.4 复合分…

罗永浩再创业,这次盯上了 AI?

罗永浩&#xff0c;1972年7月9日生于中国延边朝鲜族自治州的一个军人家庭&#xff0c;是一名朝鲜族人&#xff1b;早年在新东方授课&#xff0c;2004年当选 “网络十大红人” &#xff1b;2006年8月1日&#xff0c;罗永浩创办牛博网&#xff1b;2008年5月&#xff0c;罗永浩注册…

自然语言处理基础:全面概述

自然语言处理基础&#xff1a;全面概述 什么是NLP及其重要性、NLP的核心组件、NLU与NLG、NLU与NLG的集成、NLP的挑战以及NLP的未来 自然语言处理&#xff08;NLP&#xff09;是人工智能&#xff08;AI&#xff09;中最引人入胜且具有影响力的领域之一。它驱动着我们日常使用的…

WPF系列八:图形控件Path

简介 Path控件支持一种称为路径迷你语言&#xff08;Path Mini-Language&#xff09;的紧凑字符串格式&#xff0c;用于描述复杂的几何图形。这种语言通过一系列命令字母和坐标来定义路径上的点和线段&#xff0c;最终绘制出想要的图形。 绘制任意形状&#xff1a;可以用来绘…

计算机图形学【绘制立方体和正六边形】

工具介绍 OpenGL&#xff1a;一个跨语言的图形API&#xff0c;用于渲染2D和3D图形。它提供了绘制图形所需的底层功能。 GLUT&#xff1a;OpenGL的一个工具库&#xff0c;简化了窗口创建、输入处理和其他与图形环境相关的任务。 使用的函数 1. glClear(GL_COLOR_BUFFER_BIT |…