pymysql详解——通过Python连接Mysql数据库

news2025/2/23 13:31:29

pymysql详解——通过Python连接Mysql数据库

pymysql是可用于连接mysql数据库,且能够提供mysql与python窗口交互创立通道的工具库。可以通过创建引擎,建立游标直接通过python编程实现mysql数据库操作。在开发和分析可形成线性脚本。是广泛使用的库。

连接数据库的重要性

做接口自动化测试的时候,我们需要校验数据是否正常入库,数据是否正确,来做断言处理;有的时候需要修改数据,去执行其他场景的测试用例;有的时候需要删除数据,从而实现同一个数据多次使用。
例如:注册了一个新用户,产生了多余的数据,下次同一个账号就无法注册了,这种情况怎么办呢?自动化测试都有数据准备和数据清理的操作,如果因此用例产生了多余数据,就需要清理数据,可以用Pyhthon连接Mysql直接删除多余的数据就可以了。

python连接Mysql的模块安装
在Pycharm—点击–Terminal—输入pip install PyMySQL等待完装完毕即可,如图所示
在这里插入图片描述
也可以通过pycharm设置里面找到python解释器查看相关库并安装:
在这里插入图片描述

增删改需要有提交事务的操作,查不需要提交事务,但如果循环查询,务必提交事务,否则结果都是重复的
创建连接对象——db= pymysql()
创建cursor游标对象——cur = db.cursor()
数据操作——cur.execute(sql)
提交连接事务——db.commit()
关闭cursor游标对象——cur.close()
关闭连接对象——db.close( )

什么是游标
游标,通俗来说就是“游动的标志”,

有时候,我们执行一条查询语句的时候,往往会得到N条返回结果,执行sql语句去除这些返回结果的接口,就是游标。沿着这个游标,我们可以一次取出一行记录。
举个例子:
当不使用游标功能,去执行 select * from employee where salary > 3000 ; 这条语句时,如果有1000条返回结果,系统会一次性将1000条记录返回到界面中,你不能做选择,也不能做其他操作。
当我们开启了游标功能,再去执行这条语句的时候,系统会先帮你找到这些行,先给你存放起来,然后提供一个游戏接口。当你需要数据的时候,就借助这个游标去一行行的取出数据,你每取出一条记录,游标指针就朝前移动一次,一直到取完最后一行数据。
当我们使用python连接MySQL的时候,那么python就相当于是MySQL服务器的一个客户端,我们利用python这个client去操作MySQL的server
在pymysql中操作数据库,就是使用游标这种方式来获取表中的数据。

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

开始连接MySql
创建游标,使数据以字典的形式返回

   # 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
   cursor = db.cursor()
  # 添加cursor参数,指定返回字典数据类型
  cursor = db.cursor(cursor=pymysql.cursors.DictCursor)

查询数据
写查询语句,查询一行数据,查询多行数据

语法:

 
select 列名称 from 表名称 [查询条件]
 
# 查询表里所有内容
 
select * from studys
 
例如要查询 students 表中所有学生的名字和年龄, 输入语句
 
select name, age from studys
 
fetchone()获取一行数据
 
fetchall()获取所有数据

增加数据
需要使用db.commit(),提交到数据库执行

语法:

insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:
insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);
其中 [ ] 内的内容是可选的, 例如, 要给user_test数据库中的 user 表插入一条记录, 执行语句:
insert into studys values(3, '小明')

删除数据
需要使用db.commit(),提交到数据库执行
语法:delete from 表名称 where 删除条件;

在插入数据的时候,可能会出现主键冲突,为防止插入数据时,抛出异常,所以加上try…except

我们先来做个简单的案列:
先用Navicat连接我们数据库:
然后先建一个简单的表
在这里插入图片描述
teacher表的创建:

create table teacher(
id int(4) not null unique auto_increment,
num int(10) not null unique,
name varchar(20) not null,
sex varchar(4) not null,
birthday datetime,
address  varchar(50),
primary key(id) 
)engine = InnoDB default charset = utf8 collate = utf8_bin; 

就可以成功看到我们的建的teacher表了:
在这里插入图片描述

我们利用pymysql库连接mysql使用 execute()方法执行插入数据sql语句并查询teacher表:

import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost", port=3306, user="你的用户名", password="xxxx", database="zcc")
"""
    host:地址,你的数据库地址
    port:端口号
    user:用户名
    password:密码
    database:要操作的数据库
"""
# 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
cursor = db.cursor()
# 添加cursor参数,指定返回字典数据类型

# 使用 execute()方法执行sql语句
cursor.execute("insert into teacher values(1,1001, '张三', '男', '1984-11-08', '北京市昌平区'),"
               "(2, 1002, '李四', '女', '1970-01-21', '北京市海淀区'),"
               "(3, 1003, '王五', '男', '1976-10-30', '北京市昌平区'),"
               "(4, 1004, '赵六', '男', '1980-06-05', '北京市顺义区')")

# 使用commit()方法,提交到数据库执行
db.commit()

# 可以再执行查询语句,看数据是否插入成功
cursor.execute("select * from teacher")

# # 使用fetchone()方法获取单条数据
data = cursor.fetchall()
print(data)
# 关闭数据库连接

在这里插入图片描述

输出的data结果就是sql语句查询到的结果

data = cursor.fetchall()
print(data)

我们再去navicat里面看看
在这里插入图片描述
这里显示成功插入数据

我们再试试删除一条teacher表记录 :delete from teacher where id =1 然后我们再查询删除后teacher表的内容

import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost", port=3306, user="你的用户名", password="xxxx", database="zcc")
"""
    host:地址,你的数据库地址
    port:端口号
    user:用户名
    password:密码
    database:要操作的数据库
"""
# 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
cursor = db.cursor()

# 将sql语句赋值给一个变量
update_sql = "delete from teacher where id =1"

try:
    # 使用 execute()方法执行sql语句
    cursor.execute(update_sql)

    # 使用commit()方法,提交到数据库执行
    db.commit()

    # 可以再执行查询语句,看数据是否删除成功
    cursor.execute("select * from teacher")
    # 使用fetchone()方法获取单条数据
    data = cursor.fetchall()
    print(data)
except:
    print("数据修改失败,请查检sql语句")
    # 发生错误,回滚
    db.rollback()
    # 想知道报了什么错,可以抛个异常
    raise

# 关闭数据库连接
db.close()

在这里插入图片描述
注意这里:
#fetchone()获取一行数据
#fetchall()获取所有数据

navicat也成功显示删除记录成功:
在这里插入图片描述
这就是关于pymsql连接数据库简单的小案例希望看过我的博客对你所有帮助!

今日写博客听歌—— Can We Kiss Forever歌手:Kina / Adriana Proenza

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

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

相关文章

计算机组成原理——第七章输入输出系统(上)

如若来世再相见,半点朱唇尽我尝 文章目录 7.1.1 输入输出系统和IO控制方式7.1.2 外部设备7.2 IO接口7.3.1 程序查询方式流程图 7.1.1 输入输出系统和IO控制方式 i/O接口是一个电子部件,会被集成与主板中,而I/O设备则是你看得见摸得着的那些设…

O(1) 时间复杂度的抽奖算法 - The Alias Method

0 背景 在营销等场景下,有种常见的玩法,即抽奖,不论前端抽奖界面如何炫酷,底层抽奖组件具有一致性。本文不讨论奖池的抽取规则、奖池奖品配置、奖池切换、抽奖机会、奖品扣减和发放、告警和降级等,主要聚焦于抽奖算法…

Nginx之TCP/UDP反向代理

Nginx从1.9.13起开始发布ngx_stream_core_module模块不仅能支持TCP代理及负载均衡,其实也是支持UDP协议的。 1.Nginx下载 wget http://nginx.org/download/nginx-1.24.0.tar.gz 2.Nginx安装 #yum -y install proc* openssl* pcre* # tar -zxvf nginx-1.24.0.tar.gz #cd n…

【Docker学习三部曲】—— 核心篇

容器数据卷 基本概念 容器数据卷是 Docker 中用于持久化存储容器数据的一种解决方案它允许容器中的数据在容器重新创建或迁移时得以保留,而不会丢失数据卷可以看作是 Docker 主机和容器之间的一个共享目录容器可以将数据写入数据卷,而这些数据将储存在…

【Jpom】docker-compose 部署 RabbitMQ 3.11.X (包含延迟队列插件)

文章目录 前言参考目录前置准备系统版本软件版本 部署步骤1、Jpom 配置节点信息2、Dockerfile 文件3、插件上传4、修改 docker-compose.yml5、构建 Dockerfile(可选)6、执行 docker-compose 编排7、Jpom 查看 Docker8、登录 RabbitMQ9、直接执行 docker-…

OrCAD原理图检查

OrCAD原理图检查 FPGA或处理器芯片原理图封装检查OrCad元件Part Reference与Reference位号不同检查所有器件是否与CIS库元件匹配用CIS库中的元器件替换已存在器件方法1方法2 DRC检查修改页码Annotate重排位号利用Intersheet References功能进行off-page索引检查封装、厂家、型号…

[数据结构 - C语言] 顺序表

目录 1、线性表 2、顺序表 2.1 顺序表的概念 2.2 接口 3、接口实现 3.1 初始化 3.2 销毁 3.3 容量检测 3.4 打印数据 3.5 顺序表的头插 3.6 顺序表的尾插 3.7 顺序表的头删、尾删 3.8 顺序表查找 3.9 指定位置插入数据 1、线性表 线性表(linear list&…

认识HTTPS以及了解HTTPS的加密过程

目录 简单认识HTTPS: 运营商劫持: 加密的理解: HTTPS的工作过程: 对称加密: 非对称加密: 中间人攻击 证书 简单认识HTTPS: HTTPS 也是一个应用层协议。是在 HTTP 协议的基础上引…

逆向-还原代码之(*point)[4]和char *point[4] (Interl 32)

// source code #include <stdio.h> #include <string.h> #include <stdlib.h> /* * char (*point)[4] // 数组指针。 a[3][4] // 先申明二维数组,用它来指向这个二维数组 * char *point[4] // 指针数组。 a[4][5] // 一连串的指针…

客快物流大数据项目(一百一十六):远程调用 Spring Cloud Feign

文章目录 远程调用 Spring Cloud Feign 一、​​​​​​​简介

OpenGL入门之 深入三角形

一、引言 本教程使用GLEW和GLFW库。  通过本教程&#xff0c;你能轻松的、深入的理解OpenGL如何绘制一个三角形。  如果你不了解OpenGL是什么&#xff0c;可以阅读OpenGL深入理解。 二、基本函数和语句介绍 通过阅读以下的函数&#xff0c;你的大脑里能留下关于OpenGL基本函…

【每日一题Day184】LC1187使数组严格递增 | dp

使数组严格递增【LC1187】 给你两个整数数组 arr1 和 arr2&#xff0c;返回使 arr1 严格递增所需要的最小「操作」数&#xff08;可能为 0&#xff09;。 每一步「操作」中&#xff0c;你可以分别从 arr1 和 arr2 中各选出一个索引&#xff0c;分别为 i 和 j&#xff0c;0 <…

前端学习:HTML块、类、Id

目录 快 一、块元素、内联元素 二、HTML 元素 三、HTML元素 类 一、分类块级元素 二、分类行内元素 Id 一、使用 id 属性 二、 class与ID的差异 三、总结 快 一、块元素、内联元素 大多数HTML元素被定义为块级元素或内联元素。 块级元素在浏览器显示时&#xff0c;通常会…

Docker常用命令详解,有这些足够了

首先启动类 启动docker&#xff1a;systemctl start docker 停止docker&#xff1a;systemctl stop docker 重启docker&#xff1a;systemctl restart docker 查看docker状态&#xff1a;systemctl status docker 开机自启动&#xff1a;systemctl enable docker 查看docker概要…

【CocosCreator入门】CocosCreator组件 | Widget(对齐)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中的Widget组件用于UI布局和调整&#xff0c;可以通过调整Widget组件来实现UI元素的自适应和排版。 目录 一、组件介绍 二、组件属性 三、组件使用 四、脚本示例 一、组件介绍 在Coc…

Python中的统计学(二)

大数定律和中心极限定律都是概率论中重要的定理。它们之间的不同在于它们所涉及的随机变量和极限的不同。 大数定律是指随着样本容量的增大&#xff0c;样本均值越来越接近于总体均值的定律。即样本均值的极限等于总体均值&#xff0c;也就是说&#xff0c;当样本量足够大时&a…

绝了!!PDF转换没想到这么简单

PDF处理是很多小伙伴的“痛”&#xff0c;在工作学习中&#xff0c;PDF转换、PDF编辑、PDF和图片的各种问题都是需要快速解决的&#xff0c;但市面上不少付费的软件让我们很是肉痛&#xff01; 今天给大家推荐5个免费的神仙PDF转换网站&#xff0c;解决你的所以PDF问题~ 记得…

Simulink 自动代码生成电机控制:硬件开发板系统介绍

目录 前言 电源电路 MCU电路 开发板接口 关于电流采样和过流保护 驱动部分 总结 前言 在介绍开发板之前突然有感而发想多说两句&#xff0c;本人从事电控行业也是有一些年头了&#xff0c;除了刚刚毕业就接触的电机控制外&#xff0c;就是电源控制相关的&#xff0c;像三相P…

Point-to Analysis指针分析(2)

https://blog.csdn.net/qq_43391414/article/details/111046505 下面介绍一种新的指针分析的算法Steensgaard算法&#xff0c;并将其与上一篇文章介绍 Steensgaard算法 不同于Andersen算法,Steensgaard在前者的基础上&#xff0c;再次对问题进行了简化&#xff0c;从而指针分析…

远程访问及控制

目录 一、SSH远程管理 1&#xff09;SSH的简介 2&#xff09;SSH的优点 3&#xff09;常用的SSH软件的介绍 4&#xff09;SSH 的组成 5&#xff09;SSH的密钥登录 密钥登录的过程&#xff1a; 二、SSH的运用 1 &#xff09;SSH配置文件信息 2&#xff09;存放ssh服务…