当前位置: 首页 > article >正文

测试造数,excel转insert语句

目录

  • excel转sql的insert语句
    • 一、背景
    • 二、直接上代码

excel转sql的insert语句

一、背景

在实际测试工作中,需要频繁地进行测试造数并插入数据库验证,常规的手写sql语句过于浪费时间,为此简单写个脚本,通过excel来造数,快速生成insert语句,以此提高测试效率。

二、直接上代码

  1. 代码如下:
import pandas as pd
import pyperclip
import traceback
import os


class SourceData:

    def __init__(self, path, sheet_name, engine=None):
        # 通过pandas读取excel文件的指定sheet页,过滤掉为空的表头
        self.df = pd.DataFrame(pd.read_excel(path, sheet_name=sheet_name, dtype='string', na_filter=False,
                                             usecols=lambda x: not x.startswith('Unnamed'), engine=engine))
        self.data = self.df.iloc[:, 1:]  # 读取数据主体
        self.table_name = self.df['table_name'][0]  # 读取要造数的表名

    def to_sql(self):
        keys = '("' + '","'.join(list(map(lambda x: x.strip(), self.data.columns.to_list()))) + '")'  # 拼接sql语句的keys部分
        table_name = self.table_name
        values = ','.join(
            map(lambda x: "('" + "','".join(x) + "')", self.data.to_records(index=False).tolist()))  # 拼接sql语句的values部分
        sql = ' '.join(['INSERT INTO', table_name, keys, 'VALUES', values]) + ';'  # 构造insert语句
        print(sql)  # 打印到交互窗口
        pyperclip.copy(sql)  # 复制到剪贴板,以便直接进行粘贴


if __name__ == '__main__':
    while True:
        path = input('请输入源数据文件路径:')
        if not os.path.exists(path):  # 文件错误时不退出,而是重新输入
            print('文件不存在,请检查路径后重新输入!')
            continue
        else:
            while True:
                sheet_name = input('请输入sheet_name:')
                try:
                    obj = SourceData(path, sheet_name)
                    obj.to_sql()
                except Exception as msg:
                    print(traceback.format_exc())
                    continue


  1. excel造数模板如下
    由于sheet页名称有长度限制,所以只有将表名放于主体区域::
    在这里插入图片描述

  2. 执行结果如下:
    先指定excel路径,后面会进入到sheet名称读取的循环中,可以在一个excel文件里面建多个表的造数sheet。
    转换结果会打印出来,但用户不需要再去选中复制,因为这里用了pyperclip模块,在代码中已经复制到剪贴板了,可以直接粘贴使用
    在这里插入图片描述

由于功能简单,所以就不做界面了


http://www.kler.cn/a/371002.html

相关文章:

  • 【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍
  • mysql-5.7.18保姆级详细安装教程
  • Boost Asio TCP异步服务端和客户端
  • 汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮
  • Python的秘密基地--[章节11] Python 性能优化与多线程编程
  • Linux网络_套接字_UDP网络_TCP网络
  • 医院管理系统设计与实现
  • Vue中使用 vuedraggable进行拖拽
  • JavaScript基本内容续集之函数和对象
  • 服务攻防之开发组件安全
  • 18 Docker容器集群网络架构:一、etcd 概述
  • mit6824-04-主备份复制(VM-FT论文)
  • 小小猫棒onu替换家用光猫,薅运营商带宽羊毛,突破1000M
  • golang 后端验证码 模拟接口 post get ,postman测试
  • 洛谷 P4251 [SCOI2015] 小凸玩矩阵
  • python实战项目49:足彩开奖竞猜数据抓取
  • uni-app如何接收uni.$emit()里面传递的内容
  • 【AI试衣整合包及教程】CatVTON带你进入AI换装新时代
  • SpringBoot实现 License 认证(只校验有效期)
  • 三维测量与建模笔记 - 2.1 坐标转换基础
  • 一款强大的开源OCR工具,支持90+语言识别
  • vmware运维技巧总结
  • 倪师学习笔记-天纪-易经八卦
  • Axure设计之多级菜单导航教程(中继器)
  • 好用的idea插件之自动sql生成
  • 详细指南:解决Garmin 手表无法与电脑连接的问题