Python脚本之连接MySQL【一】

在执行Python自动化脚本的用例,有产生测试数据,但我很少去数据库做连接查询,但是这一部分总得会,总有用上时候。
没想到最近有用到,所以这期分享下Python连接数据库的操作。

个人博客:https://blog.csdn.net/zyooooxie

PyMySQL 连接数据库

PyMySQL是一个用于Python的纯Python MySQL客户端库,用于连接和操作MySQL数据库。它是在Python的标准DB-API接口上构建的,提供了简单易用的API,使开发人员可以轻松地在Python中进行MySQL数据库的操作。

https://pymysql.readthedocs.io/en/latest/user/installation.html

情景一

有这样一个需求是 某web页面,中间的Closing Balance 会每十分钟刷新一次;

当产品给我说后,我就懵了,这玩意咋测?我不想,每数着十分钟查看一次数据(十分钟也有可能因为没有交易,数值保持不变)。
在这里插入图片描述

找后台同学了解到:这个十分钟的更新时间 保存在某张表的create_time字段;

然后我想到可以用后面的值和前面的值做个减法,差小于等于十分钟就好。因为这个Closing Balance 对应6个gateway的,每次更新有6条记录;

我最初的思路: 完全可以用第N个减掉 第N-6个,差小于等于十分钟【虽然有可能是前后相减的是不同gateway类型的,但是因为这6个每次必查,并且每次查询时间很近很近,可以忽略 不同gateway这个情况】;

第二版:查询数据时候加个筛选条件 gateway = “iris”,把最初的思路的弊端 全部优化;

下面是写的 读取数据库某表这个字段的所有值 的方法;

    def test_sql_con(self):
        db = pymysql.connect('xxxxx', 'xx', 'xxxx', 'xxx')
        cur = db.cursor()
        sql_t = 'SELECT create_time FROM t_fin WHERE create_time> 1559009290000 AND gateway = "iris";'
        # 2019-05-28 10:08:10开始
        try:
            cur.execute(sql_t)
            result = cur.fetchall()

            List1 = []
            for i in result:
                # print(i, type(i))
                List1.append(i[0])
            print(List1, len(List1))
            return List1				# 这个地方 代码不合适
        except BaseException as b1:
            print('error', b1)
        db.close()

下面是 递归test_j(),断言;

    def test_j(self, fun, n):
        if n < 2:
            pass
        else:
            assert fun[n] - fun[n-1] <= 660000      # 11分钟

情景一 代码优化

第三版:第一版的基础上,再 保证create_time 在那个更新时间【后台定的是每小时的整点、10分、20分、30分、40分、50分】附近;

突然想到把时间戳转为普通格式str,切片后再做分钟、秒的断言,也是可以实现验证的【1.验证固定时间【分】 2.验证实际时间【秒】】。

在这里插入图片描述

情景二

后台每天会定时拉取另一个系统的交易数据,要查询这些交易的拉取时间;其实思路和前面很相似,只是因为这边交易数据量不确定,整个表所有create_time是要去重排序的,在对这列表的数据做个递减,断言就可以。

    def test_sql_con(self):
        db = pymysql.connect('a', 'aa', 'aaa', 'aaaa')
        cur = db.cursor()
        sql_t = 'SELECT create_time FROM t_fin_iris_transaction_statments WHERE create_time> 1560355204000;'
        # 2019-06-13 00:00:04开始

        # sql_t = 'SELECT create_time FROM t_fin_iris_transaction_statments WHERE create_time> 1557676800000;'
        # 2019-05-13 00:00:00
        try:
            cur.execute(sql_t)
            result = cur.fetchall()
            # print(result)
            List1 = []
            for i in result:
                # print(i, type(i))
                List1.append(i[0])
            print(List1, len(List1))
            new_List1 = list(set(List1))
            new_List1.sort(key=List1.index)
            print(new_List1, len(new_List1))
            return new_List1

        except BaseException as b1:
            print('error', b1)
        db.close()

下图是test_j(),断言。
在这里插入图片描述

因为数据并非每天都有,所以fun[n] - fun[n - 1] 的断言出现错误;

上图中的 t1、t2代表 某天的更新时间点 【每天早上8点更新,t1就是每天7点59的时间戳,t2就是每天8点01分的时间戳】。

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值