测试造数,excel转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模块,在代码中已经复制到剪贴板了,可以直接粘贴使用
    在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值