python如何连接数据库 ?一文详解pymysql的用法 。

news2025/1/19 23:25:21

使用Python连接数据库是常用的操作 ,那么在Python代码中取操作数据库呢 ? 接下来介绍一个包 :pymysql .它能帮我们在代码中连接MySQL数据库进行各种操作。

 

1.常用数据库模块

在做自动化测试时,我们经常会查库的需求 ,那么该如何使用python去查找数据库呢 ? 这里介绍一个python的第三方包PyMySQL . 通过它使用python语言可以连接mysql数据库 。

以下为安装和验证 :

#安装: pip install pymysql
#验证: pip show pymysql 

2.数据库操作流程

首先我们可以通过查看客户端工具连接数据库的流程 :

 

如果使用pymysql进行连接数据库的流程具体如下:

  1. 导包

  2. 创建数据库连接

  3. 获取游标对象

  4. 执行操作

  5. 关闭游标对象

  6. 关闭数据库连接

将工具和pymysql的连接流程放在一起做个比对,将会是如下:

3.使用pymysql操作

3.1 建立连接

如果想使用pymysql操作数据库 ,你就需要调用pymysql中的connect()方法建立连接 。

# 建立连接对象 
conn = pymysql.connect(host=None,user=None,password="",database=None,port=0,charset="")
​
# 参数说明:
    host :数据库服务器地址
    user :登录用户名
    password : 密码
    database : 数据库名称
    port : 数据库连接端口,默认为3306时刻不填写。
    charset : 数据库编码,一般设置为utf8
        

案例 :使用pymysql进行建立连接数据库 ,连接school数据库

conn = pymysql.connect(host="localhost",user="root",password="root",database="school",charset='utf8')
3.2常用方法

常用的操作数据库方法:

  • cursor() : 获取游标对象

  • close() : 关闭对象

  • execute(sql) : 执行SQL语句 ,sql参数为需要传入的SQL语句。

  • fetchone() : 查询一条数据返回,从指针的下一条开始查一条数据。 。

  • fetchmany(num) : 查询num条数据返回

  • fetchall() : 获取全部的返回行

  • rowcount : 获取execute()方法执行后影响的行数

将以上的方法和操作步骤进行对应

 

3.3项目案例

对数据库表数据进行查询

"""
连接数据库的流程 :
1. 导包 :import pymysql
2. 建立连接 : connect(host,user,password,port,database,chaset)
3. 创建游标 : cursor()
4. 执行SQL语句
    (1) 执行SQL :execute(sql)
    (2) 查询一条数据 : fetchone()
    (3) 查询多条数据 : fetchmany(number)  , number代表的是传入多条数据
    (4) 查询所有数据 : fetchall()
5. 关闭游标 : close()
6. 关闭连接 : close()
"""

# 1. 导包
import pymysql

# 2. 建立连接对象
connect = pymysql.connect(host='localhost',user='root',password='root',database='school',charset='utf8')

print(connect)

# 3.  创建游标
cursor = connect.cursor()

# 4. 执行SQL语句
sql = "select * from students"
res = cursor.execute(sql)
print(res)

# 需求1 :查询所有的数据
# all_data = cursor.fetchall()
# print(all_data)				, 查询结果返回一个元组,每一条数据也是一个元组

# 需求2 : 查询一条数据
# one_data = cursor.fetchone()
# print(one_data)				,返回的这条数据为元组 

# 需求3 : 查询5条数据
five_data = cursor.fetchmany(5)
print(five_data)				# 查询结果返回一个元组,每一条数据也是一个元组

# 5. 关闭游标
cursor.close()

# 6. 关闭连接对象
connect.close()

# 总结 :以上的三个查询方法,若只返回一条数据 ,这一条数据就在一个元组中。若返回多条数据 ,每一条数据是构成一个元组 ,然后多条数据又放在一个大的元组中。

对数据库表数据进行增删改


# 1. 导包
import pymysql

# 2. 建立连接对象
connect = pymysql.connect(host='localhost',user='root',password='root',database='school',charset='utf8')

print(connect)

# 3.  创建游标
cursor = connect.cursor()

# 4. 执行SQL语句
#需求1 :数据的修改
# sql = "update students set age = 54 where name = '王伟'"
# res = cursor.execute(sql)
# print(res)

# 需求2数据的插入
# sql = "insert into students values(27,'李四',19,'男','2班',345678943,'天津')"
# res = cursor.execute(sql)
# print(res)

# 需求3 :数据的删除
sql = "delete from students where name = '李四'"
res = cursor.execute(sql)
print(res)


# 5. 关闭游标
cursor.close()

# 6. 关闭连接对象
connect.close()

# 总结 : 使用cursor.execute()方法就可以进行增删改,只需要将SQL语句传入该方法中即可。

4.数据库封装

这里的数据库封装其实就是将项目的数据库连接对象封装进来,大家不需要每次进行初始化连接,而是执行调用一个方法就可以执行相应的SQL语句即可 。

当然数据库封装应该是最灵活的一种情况 ,10个人有10个人的封装法 ,这里只给出一种最基本的封装方式 。具体如下 :


# 数据库类
import pymysql
from setting import DB_INFO
from loguru import logger


class MysqlClient(object):

    # 初始化方法,建立连接
    def __init__(self):
        self.conn = pymysql.connect(**DB_INFO)  # 初始化数据库连接

    # 执行SQL语句的增删改
    def execute(self,sql):
        try:
            with self.conn.cursor() as cursor:
                cursor.execute(sql)
                self.conn.commit()
                logger.info("执行的SQL语句:{}".format(sql))
        except Exception as e:
            logger.error("执行SQL错误,报错原因{},执行SQL:{}".format(e,sql))
            self.conn.rollback()


    # 执行查询
    def get_data(self,sql):
        try:
            with self.conn.cursor() as cursor:
                cursor.execute(sql)
                result = cursor.fetchall()
                logger.info("执行的SQL语句:{}".format(sql))
                return result
        except Exception as e:
            logger.error("执行SQL错误:{},执行SQL:{}".format(e, sql))
            
            
    # 关闭对象
    def close(self):
        self.conn.close()

5.项目集成

在项目中添加一个mysql的包名,在此包中除了编写封装数据库连接的代码,主要就是编写各模块需要执行的SQL语句。 具体如下 :

  1. 在创建项目框架时,创建mysql包名 。然后此包下创建一个连接数据库的模块 。 比如:mysql_client.py

  2. 在mysql包下可以创建项目中所需要的SQL语句模块 ,比如user_sql.py

  3. 在测试用例中调用响应的SQL语句 。

5.1 创建连接数据和所需执行的SQL语句模块

5.2 在测试用例中调用对应模块

 

6.项目总结

至此,我们已经实现了五步了 ,分别是 :

第一 、如何编写一个接口自动化框架 ,在第一篇博文中介绍了 。

第二、如何使用unittest编写测试用例 ,已经在第二篇博文中介绍了 。

第三、如何使用requests实现接口请求 ,并和测试用例如何对接 ,已经在第三篇博文中介绍了。

第四、如何使用yaml编写测试数据 ,已经在第四篇博文中介绍了 。

第五,如何使用allure生成测试报告,已经在第五篇博文中介绍了 。

第六 ,如何使用loguru记录日志 ,已经在第六篇博文中介绍了 。

第七,如何使用pymysql连接数据库,也就是本篇博文了 。

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

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

相关文章

解剖—顺序表相关OJ练习题

目录 一、删除有序数组中的重复项,返回出现一次元素的个数。 二、原地移除数组中所有数值等于val的元素 三、合并两个有序数组 四、旋转数组 五、数组形式的整数加法 一、删除有序数组中的重复项,返回出现一次元素的个数。 26. 删除有序数组中的重…

Service Mesh和Kubernetes:加强微服务的通信与安全性

文章目录 什么是Service Mesh?Service Mesh的优势1. 流量控制2. 安全性3. 可观测性 Istio:Service Mesh的领军者流量管理安全性可观测性 Linkerd:轻量级Service Mesh流量管理安全性可观测性 Istio vs. Linkerd实际应用结论 🎈个人…

vscode中4个json的区别和联系

在vscode中快捷键ctrlshiftp,然后输入setting,会出现下图几个选项 当不同设置之间出现冲突时,听谁的: Open Workspace Settings(JSON) > Open Settings(JSON) Open User Settings > Open Default Settings(JSON) Open Wo…

openstack 云主机 linux报 login incorrect

还未输入密码就提示login incorrect 不给输密码位置 完全不给输密码的机会 关机进入单用户 检查登录安全记录 vi /var/log/secure 发现 /usr/lib64/security/pam_unix.so 报错 将正常的机器提取/usr/lib64/security/pam_unix.so 比对MD5一致, 另外判断 libtir…

车载开发学习——CAN总线

CAN总线又称为汽车总线,全程为“控制器局域网(Controller Area Network)”,即区域网络控制器,它将区域内的单一控制单元以某种形式连接在一起,形成一个系统。在这个系统内,大家以一种大家都认可…

市值缩水90%以上,泛生子何以败退美股?

癌症是人类面临的最大健康威胁之一,也是医学界最难攻克的难题之一。随着科技的发展,癌症精准医疗逐渐成为治疗癌症的新方向,癌症精准医疗能通过对癌细胞的基因检测和分析,为患者提供个性化的治疗方案。然而,这一领域的…

redis(其它操作、管道)、django中使用redis(通用方案、 第三方模块)、django缓存、celery介绍(celery的快速使用)

1 redis其它操作 2 redis管道 3 django中使用redis 3.1 通用方案 3.2 第三方模块 4 django缓存 5 celery介绍 5.1 celery的快速使用 1 redis其它操作 delete(*names) exists(name) keys(pattern*) expire(name ,time) rename(src, dst) move(name, db)) randomkey() type(na…

VBA技术资料MF71:查找所有空格并替换为固定字符

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

实现实时美颜:主播直播美颜SDK的技术细节

在今天的数字时代,直播和实时互动成为了日常生活的一部分,而主播直播美颜SDK的出现为用户提供了更加精美的视觉体验。这项技术的背后有着复杂的技术细节,从图像处理到机器学习,本文将深入探讨主播直播美颜SDK的技术细节&#xff0…

四边形不等式

区间dp问题&#xff0c;状态转移方程&#xff1a; dp[i][j] min( dp[i][k] dp[k1][j] w[i][j] ) //w[i][j]是从i到j的&#xff0c;一个定值 不随k改变&#xff0c;而且w的值只和i j有关&#xff0c;是它们的二元函数。 其中i<k<j ,初始值dp[i][i]已知。 含义&#x…

第三类医疗器械经营许可证经营范围

在我国&#xff0c;医疗器械监督管理条例规定:医械经营企业要依据主营产品办理相应许可证。医疗器械根据其风险性又分为三类&#xff0c;一类医疗器械实行产品备案管理&#xff0c;第二类、第三类医疗器械实行产品注册管理&#xff0c;经营第二类、第三类医疗器械应当持有《医疗…

Day 2 Qt

#include "my_widget.h" #include "ui_my_widget.h"My_Widget::My_Widget(QWidget *parent): QWidget(parent), ui(new Ui::My_Widget) {ui->setupUi(this);//窗口的相关设置 // this -> resize(800,500);this -> setWindowTitle("QQ聊天…

APP备案公钥、证书MD5指纹/签名MD5值获取方法

本文只详细讲解android app获取方法&#xff0c;三种方式&#xff1a; 1. 你的应用已安装到手机&#xff0c;android应用市场搜索下载安装 APP备案助手&#xff0c;此app可直接获取所有已安装app的公钥、证书MD5指纹/签名MD5值&#xff0c;示例&#xff1a;获取 抖音app公钥、…

每日一练 | 华为认证真题练习Day120

1、MPLS域中的LER全称为Label Egress Router。 A. 对 B. 错 2、如果一个以太网数据帧的Type/Length字段的值为0x0800&#xff0c;则此数据帧所承载的上层报文首部长度范围为20-60B。 A. 对 B. 错 3、在VRP平台上&#xff0c;可以通过下面哪种方式访问上一条历史命令&#x…

AI爆文变现-写作项目-脚本配置教程-解放双手

之前给大家分享过AI爆文的写作教程&#xff0c;没看过的可以看下对应的教程&#xff1a; AI爆文撸流量主保姆级教程2.0 因为是怼量&#xff0c;为了高效完成文章&#xff0c;我用python脚本实现了自动写文章的功能&#xff0c;发布文章目前还是要手动进行。 AI爆文教程参考&…

C++11——包装器与lambda表达式

目录 一.背景 二.lambda 1.见一见lambda 2.lambda表达式语法 3.lambda捕捉列表说明 三.函数对象与lambda表达式 四.包装器 1.function包装器 2.包装类的成员函数 五.bind 1.调整参数位置 2.减少函数参数 一.背景 在C98中&#xff0c;如果想要对一个数据集合中的元素…

c++_learning-模板元编程

模板元编程 元编程&#xff1a;元函数&#xff1a;定义&#xff1a;数值元函数&#xff1a;编译期间&#xff0c;能够被调用的类模板&#xff1a;constexpr修饰的函数&#xff1a;constexpr修饰的变量模板&#xff1a; 类型元函数&#xff1a;元函数总结&#xff1a; 混合元编程…

C++基础——内存分区模型

1 概述 C程序在执行是&#xff0c;将内存大致分为4个区域&#xff1a; 代码区&#xff1a;用于存放二进制代码&#xff0c;由操作系统进行管理全局区&#xff1a;存放全局变量和静态变量及常量栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数、局部变量等堆…

电脑版便签软件下载用哪个?

在面对每天繁忙的工作日程&#xff0c;电脑是许多上班族不可或缺的工作助手&#xff0c;而一款得心应手的电脑便签软件&#xff0c;更是可以帮助大家记录、提醒、督促各项任务按时完成的得力助手。那么&#xff0c;究竟在众多的电脑便签软。件中&#xff0c;哪一位能够真正成为…

你真的理解“感受野”了吗?

大家好啊&#xff0c;我是董董灿。 在卷积神经网络中&#xff0c;有一个非常重要且绕不开的概念叫做卷积的“感受野”。 我刚开始学习卷积的时候&#xff0c;仅仅把“感受野”理解为感受视野&#xff0c;没错就是文字上的理解。 但随着后来工作的深入&#xff0c;慢慢发现感…