Python接口自动化浅析pymysql数据库操作流程

在上一篇Python接口自动化测试系列文章:Python接口自动化浅析yaml配置文件原理及用法,主要介绍主要介绍yaml语法、yaml存储数据,封装类读写yaml配置文件。

在自动化过程中,我们需要查询数据库,校验结果是否正确,比如充值完成之后,需要查询数据库,查看充值是否成功。

以下主要介绍,pymysql安装、操作流程、语法基础及封装操作数据库类。

一、pymysql介绍及安装

01 pymysql介绍

MySQL应该说是如今使用最为普遍的数据库了,没有之一,而Python作为最为流行的语言之一,自然少不了与MySQL打交道,其中PyMySQL就是使用最多的工具库。

  • PyMySQL是一个纯Python写的MySQL客户端,可以在CPython、PyPy、IronPython和Jython环境下运行;
  • PyMySQL的性能和MySQLdb几乎相当,如果对性能要求 不是特别的强,使用PyMySQL将更加方便;
  • PyMySQL的使用方法和MySQLdb几乎一样;

02 pymysql安装

方式一:使用命令安装

pip install pymysql

方式二:PyCharm内部安装

导入模块:

import pymysql

二、pymysql流程及模块说明

01 pymysql操作流程

  • 导入pymysql;
  • 建立数据库连接:使用pymysql的connect()方法连接数据,返回连接对象;
  • 使用连接对象创建游标对象(用于操作sql);
  • 准备写sql语句(select * from student);
  • 使用游标对象执行sql;
  • 查询数据使用游标获取;
  • 关闭游标(先)和数据库连接(后)。

02

02pymysql模块说明

Connection对象

表示:conn=connect(参数列表)

作用:用于建立与数据库的连接;

创建对象:调用connect()方法;

参数列表:

host:连接的mysql主机,如本机是'localhost';

port:连接的mysql主机的端口,默认是3306;

database:数据库的名称;

user:连接的用户名;

password:连接的密码;

charset:通信采用的编码方式,推荐使用utf8;

对象的方法

对象方法如下:

close():关闭连接;

commit():提交;

cursor():返回Cursor对象,用于执行sql语句并获得结果;

execute(operation [, parameters ]):执行语句,返回受影响的行数,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句;

fetchone():执行查询语句时,获取查询结果集的第一个行数据,返回一个元组;

fetchall():执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回;

关于pymysql防注入,字符串拼接查询,容易造成注入,为了避免注入,使用pymysql提供的参数化语句;

Cursor对象

游标(cursor)就是游动的标识,通俗的说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行。

  • 用于执行sql语句,使用频度最高的语句为select、insert、update、delete;
  • 获取Cursor对象:调用Connection对象的cursor()方法:cs1=conn.cursor()

对象的属性

  • rowcount只读属性,表示最近一次execute()执行后受影响的行数;
  • connection获得当前连接对象;

三、pymysql语法基础

01 代码示例

import pymysql
# 连接数据库
conn = pymysql.connect(host='127.0.0.1', user='ITester', password='123456',
                       database='ITester', charset='utf8')
# 创建游标
cursor = conn.cursor()
# 执行sql语句
sql = 'select * from user limit 3;'
res = cursor.execute(sql)
# 获取查询结果的1条数据
data = cursor.fetchone()
print(data)
# 关闭游标连接
cursor.close()
# 关闭数据库连接
conn.close()

02 语法总结

1.连接数据库,需要host、user、password、database、charset等信息;

2.操作数据库先创建游标;

3.执行指定的sql语句,如果涉及到增、删、改数据库必须要conn.commit(),提交事务

4.查询获取数据条数有三种方法fetchone、fetchmany、fetchall。

  • cursor.fetchone() :默认获取查询结果的第一条数据;
  • cursor.fetchmany(2) :获取查询结果的指定条数,比如获取2条数据;
  • cursor.fetchall() :获取查询结果的所有数据;

5.需要注意的是,fetch获取的数据默认是元组,如果想要字典类型,

cursor=pymysql.cursors.DictCursor;

6.先关闭游标,后关闭数据库连接;

四、封装数据库类

01 封装说明

在实际项目中,很多地方都有用到数据库的操作,所以需要将数据库相关操作进行封装,方便其他模块调用。

如下,在common目录下,新建文件db_handler.py 用于封装数据库操作。

db_handler.py

import pymysql
class DBHandler:
    def __init__(self,host,port,user,password,
                 database,charset,**kwargs):
        # 连接数据库服务器
        self.conn = pymysql.connect(host=host, port=port, user=user,password=password,
                                    database=database,cursorclass=pymysql.cursors.DictCursor,
                                    charset=charset,**kwargs)
        # 获取游标
        self.cursor = self.conn.cursor()

    def query(self, sql, args=None,one=True):
        self.cursor.execute(sql, args)
        # 提交事务
        self.conn.commit()
        if one:
            return self.cursor.fetchone()
        else:
            return self.cursor.fetchall()
    def close(self):
        self.cursor.close()
        self.conn.close()
if __name__ == "__main__":
    db = DBHandler(host='127.0.0.1', port=3306,
                   user='ITester', password='123456',
                   database='ITester', charset='utf8')
    sql = 'select * from user limit 1;'
    data = db.query(sql)
    print(data)

以上就是Python接口自动化浅析pymysql数据库操作流程的详细内容,更多关于Python接口自动化pymysql数据库操作的资料请关注我们其它相关文章!

(0)

相关推荐

  • 在python中使用pymysql往mysql数据库中插入(insert)数据实例

    咱还是直接看代码吧! from pymysql import * def main(): # 创建connection连接 conn = connect(host='', port=3306, database='', user='', password='', charset='utf8') # 获取cursor对象 cs1 = conn.cursor() # 执行sql语句 query = 'insert into 表名(列名1, 列名2, 列名3, 列名4, 列名5, 列名6) value

  • 解决pymysql cursor.fetchall() 获取不到数据的问题

    1.之前的写法(不报错): data = cursor.fetchall() data_name = data[0]['task_type'] 2.简洁的写法(报错): data = cursor.fetchall()[0]['task_type'] 用 2 的写法报错之后,一度怀疑是数据库出了问题.不服气用pycharm 的watch功能进行调试,更是错上加错. 错误原因: cursor.fetchall() 相当于从数据库取数据,但是取完就没有了,再下一行继续 cursor.fetchall

  • python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 删除表 插入数据 查看数据 修改数据 删除数据 使用sqlmary操作mysql 创建表 查看表 修改表 删除表 插入数据 查看数据 修改数据 删除数据 首发时间:2018-02-24 23:59 修改: 2018-06-15,发现自己关于pymysql写了对于数据的操作示例,但没有写表结构的示例

  • pymysql之cur.fetchall() 和cur.fetchone()用法详解

    我就废话不多说了,大家还是直接看代码吧! import pymysql,hashlib 结果:单条结果 {'id': 1, 'name': '打车', 'phone': '132453'} sql = 'select * from zxj' def op_mysql(sql,many=True): db_info = {'user': 'jxz', 'password': '123456', 'host': '118*******', 'db': 'jxz', 'port': 3306, 'ch

  • pymysql模块使用简介与示例

    pymysql模块 pymysql是一个连接mysql数据库的第三方模块,可作为连接mysql数据库的客户端,对数据库进行增删改查操作 # 下载第三方模块:pip3 install pymysql 如何连接数据库并对数据库进行操作: import pymysql # 连接mysql数据库的模块 # 1.连接数据库 """ 需要传入的参数: host=None, user=None, password="", database=None, port=0, c

  • pyMySQL SQL语句传参问题,单个参数或多个参数说明

    在用pymysql操作数据库的过程中,给sql语句传参碰到了很多问题,网上传参策略很多,这里推荐两种 单个传参用%s,写起来比较简单: field = '-' sql_talk="UPDATE cnp.Test set a='' where b='%s'" cursor.execute(sql_talk % field) db.commit() 多个传参用{0}占位符: field = '-' a = 'code' sql_talk="UPDATE cnp.Test set

  • Python接口自动化浅析pymysql数据库操作流程

    在上一篇Python接口自动化测试系列文章:Python接口自动化浅析yaml配置文件原理及用法,主要介绍主要介绍yaml语法.yaml存储数据,封装类读写yaml配置文件. 在自动化过程中,我们需要查询数据库,校验结果是否正确,比如充值完成之后,需要查询数据库,查看充值是否成功. 以下主要介绍,pymysql安装.操作流程.语法基础及封装操作数据库类. 一.pymysql介绍及安装 01 pymysql介绍 MySQL应该说是如今使用最为普遍的数据库了,没有之一,而Python作为最为流行的语

  • Python接口自动化浅析logging日志原理及模块操作流程

    目录 一.日志介绍 01 为什么需要日志? 02 什么是日志? 03 日志的用途是什么? 04 日志的级别分为哪些? 05 日志功能的实现 二.Logging模块 01 logging模块介绍 02 logging模块优势 03 logging日志框架的组成 04 logging函数中的具体参数 05 简单的日志小例子 06 自定义logger日志 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析pymysql数据库操作流程,主要介绍pymysql安装.操作流程.语法基础及

  • Python接口自动化浅析登录接口测试实战

    目录 1.什么是接口? 那么,接口测试和功能测试的区别在哪呢? 2.如何开展接口测试? 3.如何设计接口用例? 1.获取接口文档 Fiddler 2.分析接口文档的接口,提取测试点 3.接口测试用例设计思路 4.接口测试其他范围 接口业务测试 接口的性能测试 接口安全测试 在项目下新建一个文件夹common 编写登录接口用例,调用封装的请求类. 对于用例的一些总结: 4.接口测试用例实战 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析unittest单元测试原理,主要介绍

  • Python接口自动化浅析unittest单元测试原理

    目录 一.单元测试三连问 1.什么是单元测试? 2.为什么要做单元测试? 3.怎么做单元测试? 二.unittest模块说明 1.unittest简介 2.unittest组成 1.TestCase(测试用例): 2.TestSuite(测试套件): 3.TestLoader(测试用例加载器): 4.TextTestRunner(执行测试用例): 5.Test Fixture(测试环境数据准备和清理): 3.unittest核心工作原理 三.unittest单元测试 1.实现思路 2.使用介绍

  • Python接口自动化浅析yaml配置文件原理及用法

    目录 一.yaml介绍及使用 01 yaml简介 02 yaml语法规则 03 yaml数据结构 对象 数组 纯量 二.yaml配置文件的使用 01 yaml配置文件准备 02 yaml配置文件格式校验 三.yaml配置文件读写 01 安装pyYaml 02 yaml模块源码解析 load: dump: 03 读写yaml配置文件 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析数据驱动原理,主要介绍openpyxl操作excel,结合ddt实现数据驱动. 在自动化过程中,

  • Python接口自动化浅析logging封装及实战操作

    在上一篇Python接口自动化测试系列文章:Python接口自动化浅析logging日志原理及模块操作流程,主要介绍日志相关概念及logging日志模块的操作流程. 而在此之前介绍过yaml封装,数据驱动.配置文件.日志文件等独立的功能,我们将这些串联起来,形成一个完整的接口测试流程. 以下主要介绍将logging常用配置放入yaml配置文件.logging日志封装及结合登录用例讲解日志如何在接口测试中运用. 一.yaml配置文件 将日志中的常用配置,比如日志器名称.日志器等级及格式化放在配置文

  • Python接口自动化浅析如何处理动态数据

    在上一篇Python接口自动化测试系列文章:Python接口自动化浅析logging封装及实战操作,主要介绍如何提取token.将token作为类属性全局调用及充值接口如何携带token进行请求. 以下主要介绍:接口自动化过程中,动态数据如何生成.动态数据与数据库数据进行对比并替换. 一.应用场景F 注册接口参数需要手机号,手机号如何动态生成? 生成的手机号如何与数据库数据进行对比? 未注册的手机号如何替换用例数据中的手机号? 二.动态手机号处理思路 编写函数,生成随机的手机号: 将生成的手机号

  • Python接口自动化浅析requests请求封装原理

    目录 以下主要介绍如何封装请求 将常用的get.post请求封装起来 get请求源码: post请求源码: 再来研究下request源码: 直接调用request函数 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析Token应用原理,介绍token基本概念.运行原理及在自动化中接口如何携带token进行访问. 以下主要介绍如何封装请求 还记得我们之前写的get请求.post请求么? 大家应该有体会,每个请求类型都写成单独的函数,代码复用性不强. 接下来将请求类型都封装起来

  • Python接口自动化浅析数据驱动原理

    在上一篇Python接口自动化测试系列文章:Python接口自动化浅析登录接口测试实战,主要介绍接口概念.接口用例设计及登录接口测试实战. 以下主要介绍使用openpyxl模块操作excel及结合ddt实现数据驱动. 在此之前,我们已经实现了用unittest框架编写测试用例,实现了请求接口的封装,这样虽然已经可以完成接口的自动化测试,但是其复用性并不高. 我们看到每个方法(测试用例)的代码几乎是一模一样的,试想一下,在我们的测试场景中, 一个登录接口有可能会有十几条到几十条测试用例,如果每组数

  • Python接口自动化浅析如何处理接口依赖

    在前面的Python接口自动化测试系列文章:Python接口自动化浅析logging封装及实战操作, 其中介绍了将logging常用配置放入yaml配置文件.logging日志封装及结合登录用例讲解日志如何在接口测试中运用. 以下主要介绍如何提取token.将token作为类属性全局调用及充值接口如何携带token进行请求. 一.场景说明 在面试接口自动化时,经常会问,其他接口调用的前提条件是当前用户必须是登录状态,如何处理接口依赖? 在此之前我们介绍过session管理器保存会话状态. 如果接

随机推荐