一. 数据库在自动化测试中的应用

存测试数据

有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到,测试的时候就从数据库中读取出来。这点是非常重要的!

存测试结果

二. python中的数据库之必备前提条件

1. 安装:pyMysql

python2中使用mysqldb,python3中不再支持,换成pyMysql

2. 安装步骤

1) 安装pyMysql模块:pip install PyMysql

2) python连接mysql数据库,需要下载驱动:https://dev.mysql.com/downloads/connector/python/mysqlmysql官方网站提供的驱动版本,目前只支持到python3.4,python版本要与驱动支持的版本匹配才能安装成功

3) 安装mysql图形界面Navicat,连接数据库后,方便查看/编辑数据库数据

(可选)安装mysql服务端:https://dev.mysql.com/downloads/mysql/

3. 数据库的常规操作

增删改查,所以我们要学的也是利用python去数据库里面读取数据,进行增删改查操作

三. python—mysql操作

对数据库进行操作步骤:

1. 连接数据库、创建游标

2. 准备好增、删、改、查sql语句

3. 执行sql语句

4. 读取执行结果—执行影响的行

5. 关闭游标、关闭连接(释放连接数)

数据库连接信息如下:

  IP地址、端口号、数据库名字、登录用户名、密码

pymysql中的连接数据库方法:

conn = pymysql.Connect(host, port, db, user, passwd)

cursorclass = pymysql.cursors.DictCursor   指定返回数据为字典形式

创建游标:

cursor = conn.cursor()  每次操作都需要获取游标,才能进行

四. python之查询数据

1. 查询数据语法

sql语句:select 字段 from 表名 where 条件语句

2. 展示数据,需要调用如下函数

fetchall():返回的数据格式是列表形式的

fetchone():返回的数据格式是元组形式的(可以用cursorclass = pymysql.cursors.DictCursor改成字典的形式)

3. 条件语句的用法

重点看代码,掌握用法

五. python之execute

execute中,sql语句的多种方式:

execute(sql语句、参数[可选]):

1. 数据直接写在sql语句中

2. 用格式化的方式

  sql语句中:列表和元组   %s代替

        字典:%(键名)s代替

  参数:为真正的数值

例:

insert_sql = "insert into test1(id, name) values(%s, %s)"

data = [14, 'xiaojian']

#字典

data1 = {'id': 14, 'name': 'xiaojian'}

insert_sql = "insert into test1(id, name) values(%(id)s, %(name)s)"

cursor.execute(insert_sql, data)

六. 提交和回滚

提交操作:在对数据库进行任何修改的情况下,都使用commit函数来提交操作

修改包括增加、修改、删除数据等操作

提交修改:

  conn.commit()

回滚操作:在对数据库进行修改的过程中,因任何异常而导致修改中断,我们都应该使用回滚操作使数据库恢复到修改之前的状态

回滚修改:

  conn.rollback()

七. 实例

实例1:增加数据

#引入相关的库
import pymysql
mysql_host = "localhost"mysql_port = 3306mysql_db = "xiaozhai"mysql_user = "root"mysql_passwd = "123456"
#连接操作:编码格式的指定,默认返回数据类型的指定 conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,           db=mysql_db, port=mysql_port, charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor) 

#获取游标 cur = conn.cursor() 

#sql语句——增加数据 sql_insert = "insert into python6(name, sex) values('xiaohua', 'female')" #执行sql语句 try:   cur.execute(sql_insert)   conn.commit() except:   conn.rollback() 

#关闭连接、关闭游标 cur.close() conn.close()

运行结果:

实例2:查询数据

#引入相关的库
import pymysql

mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "

#连接操作:编码格式的指定,默认返回数据类型的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
                db=mysql_db, port=mysql_port, charset="utf8mb4",
                cursorclass=pymysql.cursors.DictCursor)

#获取游标
cur = conn.cursor()

#查询语句
sql_select = "select * from python6"
#执行
cur.execute(sql_select)
#获取查询结果——会获取一条数据
data_a = cur.fetchone()
print(data_a)
print("=============================")
#获取查询结果——获取所有条数据(游标已经到了第二条,从第二条开始读)
data_all = cur.fetchall()
print(data_all)

#关闭连接、关闭游标
cur.close()
conn.close()

运行结果

{'id': 1, 'sex': 'male', 'name': 'xiaozhai'}
=============================
[{'id': 2, 'sex': 'male', 'name': 'xiaoli'}, {'id': 3, 'sex': 'female', 'name': 'xiaohua'}]

实例3:格式化方式插入数据

列表形式

#引入相关的库
import pymysql

mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "

#连接操作:编码格式的指定,默认返回数据类型的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
                db=mysql_db, port=mysql_port, charset="utf8mb4",
                cursorclass=pymysql.cursors.DictCursor)

#获取游标
cur = conn.cursor()

#格式化方式插入数据
data_list = ["xiaozhao", "female"]
sql_insert = "insert into python6(name, sex) values(%s, %s)"

#执行sql语句
try:
    cur.execute(sql_insert, data_list)
    conn.commit()
except:
    conn.rollback()

#关闭连接、关闭游标
cur.close()
conn.close()

运行结果

字典形式

#引入相关的库
import pymysql

mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "

#连接操作:编码格式的指定,默认返回数据类型的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
                db=mysql_db, port=mysql_port, charset="utf8mb4",
                cursorclass=pymysql.cursors.DictCursor)

#获取游标
cur = conn.cursor()

#格式化方式插入数据
data_dict = {"name": "xiaoliu", "sex":"female"}
sql_insert = "insert into python6(name, sex) values (%(name)s, %(sex)s)"

#执行sql语句
try:
    cur.execute(sql_insert, data_dict)
    conn.commit()
except:
    conn.rollback()

#关闭连接、关闭游标
cur.close()
conn.close()

运行结果

实例4:封装成类

import pymysql

class Mysql_Operate:

    def __init__(self, host, db, user, passwd, port=3306):

        #连接数据库
        try:
            self.conn = pymysql.Connect(host=host, user=user, password=passwd,
                                   db=db, port=port, charset="utf8mb4",
                                   cursorclass=pymysql.cursors.DictCursor)
            #获取游标
            self.cur = self.conn.cursor()
            #没有异常,connect_flag为0
            self.connect_flag = 0
        except Exception as e:
            print(e)
            self.connect_flag = 1

    #查找
    def select_all_datas(self, select_sql):
        #查询数据——execute函数
        self.cur.execute(select_sql)
        #获取所有的数据并返回
        data_all = self.cur.fetchall()
        return data_all

    #更新数据
    def update_datas(self, update_sql ):
        try:
            self.cur.execute(update_sql)
            self.conn.commit()
            return True
        except:
            self.conn.rollback()
            return False

    #关闭数据库连接
    def close_db(self):
        self.cur.close()
        self.conn.close()

mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "

ms = Mysql_Operate(mysql_host, mysql_user, mysql_passwd, mysql_db)
if ms.connect_flag == 0:
    pass

python中的mysql操作的更多相关文章

  1. Python中使用Mysql(安装篇)

    准备工作 import MySQLdb Linux系统自带了Python,但并不是都有这个包,至少我每次拿到一台全新的服务器时候,都发现没有装这个包. 这个东西的下载地址是 http://source ...

  2. Navicat的使用与python中使用MySQL的基本方法

    Navicat的使用与python中使用MySQL的基本方法 Navicat的下载及安装 下载地址 http://www.navicat.com.cn/download/navicat-premium ...

  3. python中的赋值操作和复制操作

    之前一直写C#,变量之间赋值相当于拷贝,修改拷贝变量不会改变原来的值.但是在python中发现赋值操作本质是和C++中的引用类似,即指向同一块内存空间.下面通过一个例子说明: p=[0,1,2,3,4 ...

  4. python中的赋值操作

    参考:https://www.cnblogs.com/andywenzhi/p/7453374.html?tdsourcetag=s_pcqq_aiomsg(写的蛮好) python中的赋值操作“=” ...

  5. python中的日志操作和发送邮件

    1.python中的日志操作 安装log模块:pip install nnlog 参数:my_log = nnlog.Logger('server_log.log',level='debug',bac ...

  6. python中实现mysql连接池

    python中实现mysql连接池 import pymysql from DBUtils.PooledDB import PooledDB MYSQL_HOST = 'localhost' USER ...

  7. python中OS模块操作文件和目录

    在python中执行和操作目录和文件的操作是通过内置的python OS模块封装的函数实现的. 首先导入模块,并查看操作系统的类型: >>> import os os.name # ...

  8. Python中的字符串操作总结(Python3.6.1版本)

    Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...

  9. Python中的json操作

    Python中的json操作 标签(空格分隔): python 编码 json 字符串前缀问题 字符串前缀可以有r,u r:表示原始(raw)字符串,比如'\n'不会被转义.常用于正则. u:表示un ...

随机推荐

  1. SOE 中调用第三方dll

    一.简介 在利用soe实现server的扩展的时候,有些时候,需要调用第三方的dll库.官网中给出了明确的说明,soe中是可以添加第三方的dll文件,但是一直没有测试.按照官方的步骤应该是一个非常的简 ...

  2. Java 语言基础之数组常见操作

    对数组操作最基本的动作: 存和取 核心思想: 就是对角标的操作 数组常见操作: 1, 遍历 2, 获取最大值和最小值 3, 排序 4, 查找 5, 折半查找 // 1. 遍历 int[] arr = ...

  3. for and range()

    pyhon 中 for 循环可以遍历任何序列的项目,如一个字典或者一个字符. for 循环格式一般如下: for <variable-变量> in <sequence-序列>: ...

  4. ionic学习笔记—常用命令

    Ionic CLI介绍 Ionic CLI是开发Ionic应用程序过程中使用的主要工具.它就像一个瑞士军刀:它在一个界面下汇集了大量工具. CLI包含许多对Ionic开发至关重要的命令,例如start ...

  5. Angular路由参数传递

    一.路由时传递参数的方式 1.在查询参数中传递数据 //页面 <a routerLink="/product" [queryParams]="{id:1}" ...

  6. 单文件快速体验使用react输出hello_world

    看了下react官方的hello world教程, 感觉对新手很不友好.codepen虽然好用, 但是封装太多东西, 看起来 太抽象. 还是喜欢像学习jQuery那样, 直接在单文件中引入必要的js文 ...

  7. UVALive 6911 F - Double Swords

    思路:1.把所有有长度的剑看做点.Ai点是肯定要取.然后求另一把剑. 先对右区间排个序,然后每次看这个区间范围内有没有剑,如果没有就添加一把(值为右端点的剑): 如果有并且数量为1且这条龙的Ai等这把 ...

  8. Java并发之CyclicBarria的使用

    Java并发之CyclicBarria的使用 一.简介 笔者在写CountDownLatch这个类的时候,看到了博客园上的<浅析Java中CountDownLatch用法>这篇博文,为博主 ...

  9. 如何修改Django中的日期和时间格式 DateTimeField

    html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2017-06-03 13:00:00,但是页面显示的却是Apr. 03, 2 ...

  10. ping主机脚本

    #!/bin/bash #ping net='172.16.1' uphosts=0 downhosts=0 for i in {1..254};do ping -c 1 -w 1 ${net}.${ ...