一. 背景

公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据。

而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库查询,

所以验证数据没有别的入口,只能通过在数据库写入数据来进行验证。

二. 工具

Python+mysql

三.前期准备

前置:当然是要先准备好测试方案和测试用例,在准备好这些后才能目标明确将要开发自动化小工具都要有哪些功能,避免走弯路

3.1 跟开发沟通

1)确认数据库连接方式,库名 ;

2)测试所涉及到的表名;

3)每个表是对哪部分业务造成影响;

4)表之间的关联关系,同业务模块之间的不同表之间是否有关联字段;

5)表中个字段数据是否有特殊来源,如用户ID、厂商名称一类与业务有一定关联程度的字段,一定要确认好是可以随机生成的 还是 需要从指定表中获取字段

3.2 设计小工具最终要实现的效果

我设计这个小工具就希望它可以完成两件事情

1) 生成sql语句,并且能写入进入mysql数据库

2) 数据我写入sql的统计结果,方便使用它直接与页面结果进行比对

3.3 给自己加个油! 我一定可以的!

四.开始编程

***因为代码内实际业务逻辑比较强,所以下面只写出一些示例啦~

4.1 先处理一下基础数据

1)因为我将要写入的内容涉及到全国的省市名称和省市行政区域代码,所以先找开发要了一个他们使用的全国省市名称及代码对照json,然后处理成字典格式备用

2)编写写入sql的语句头

通过配置文件的方式将各个表的写入语句的前半句语法格式和写入字段名称编辑好。

之后每次使用的时候只需通过配置文件读取对应表的写入语句再拼装上要写入的内容就是一个完整的sql语句了

使用配置文件的模式主要是可以统一管理,并且可以保持后面生成环节的代码整洁

[veh_scrap]

veh = INSERT INTO zqy_veh_scrap_sto (zqy_id, vin, pack_num, scrap_time, bat_is_scrap,wmi,epname,epcode,province_code,city_code,submit_time) values

4.2 编写工具模块

1)编写随机工具

因为写入的内容大部分字段需要不重复,所以使用random模块,定义不同的方法生成各种类型随机数据,如随机身份证号 随机姓名 随机编码 随机ID 等等...

再生成写入数据的时候,就可以引用这个随机工具模块引用里面的方法取随机值,以保证写入数据的唯一性

例:

def random_vin():

"""

生成随机vin

:return:

"""

return ''.join(

random.sample(['Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P',

'O', 'N', 'M', 'L', 'K', 'J', 'I', 'H', 'G', 'F', 'E',

'D', 'C', 'B', 'A', '1', '2', '3', '4', '5', '6', '7',

'8', '9', '0'], 17))

2)pyMysql模块引入并封装可用工具

因为最终要将内容写入,所以要使用pyMysql模块,将组装好的sql语句执行写入

需要封装的内容有 数据库链接 获取游标 语句执行方法 数据库查询方法 删除语句方法

例:

def get_conn():

conn = pymysql.connect(

host=,

port=,

user=,

password=,

database=,

charset='utf8')

return conn

def execut_sql(sql):

try:

conn = get_conn()

cur = conn.cursor()

cur.execute(sql)

conn.commit()

print("数据库执行成功")

cur.close()

except Exception as e:

print(str(e))

print(sql)

# 有异常就回滚

conn.rollback()

# 关闭连接

cur.close()

conn.close()

def select_one_sql(sql):

try:

conn = get_conn()

cur = conn.cursor()

cur.execute(sql)

results = cur.fetchone()

#print(results)

cur.close()

return results

except Exception as e:

print(str(e))

# 关闭连接

cur.close()

conn.close()

3)读取配置的模块

因为我们将sql语句的头通过配置文件进行管理,那么就需要一个读取配置的模块或方法,因为我比较菜 所以为了看起来更加清晰 就用模块来进行管理了

import configparser

cfg_path = 'rebulid_generate_sql_git\base_data\sql_header.ini'

cfg = configparser.ConfigParser()

cfg.read(cfg_path,encoding='utf-8')

def get_config_data(section,options):

return cfg.get(section,options)

4) 编写生成写入信息的方法

因为我们在处理基础数据的时候就已经写好了sql写入语句头了,所以现在只要生成它后面的values值就可以了,这步就是生成他values值的步骤

创建一个列表,根据写入语句内字段的顺序生成对应字段的值并添加至创建的列表中。对应字段的内容如果是随机值,就使用之前准备好的随机模块,使用里面的方法生成随机值;如果是需要从其他表中获取的值,则通过封装好的qymysql的查找方法进行搜索并引用。

例:

def recycle_veh_scrap(prov, city):

"""

报废车辆入库表

:return:

"""

prov_info = random_util.random_city_code(prov, city)

# 获取当地所有公司信息

company = search_factory_info.get_company_data(prov, city)

# 获取vin

vin = random_util.random_vin()

# 生成数据容器

insert_data = []

# 生成随机zqy_id,写入列表

insert_data.append(random_util.random_id())

# 生成随机vin,写入列表

insert_data.append(vin)

# 生成随机电池包数,写入列表

insert_data.append(random.randint(1, 10))

# 生成报废时间,写入列表

insert_data.append(random_util.random_date())

# bat_is_scrap

insert_data.append('1')

# wmi

insert_data.append(vin[0:3].upper())

# 生成报废企业名称,写入列表

insert_data.append(company[0])

# 生成报废企业代码,写入列表

insert_data.append(company[1])

# 获取省级代码,写入列表

insert_data.append(prov_info[0])

# 获取市级代码,写入列表

insert_data.append(prov_info[1])

# 数据提交时间为当前数据生成时间,写入列表

insert_data.append(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))return insert_data

5) 编写统计方法

因为我们写入的值是随机的,所以没有标准去判断最终系统写入的内容是否正确。

那就需要我们将需要对比的值取出保存并统计,用于最后对照使用。

取值的过程会在语句写入之前一步完成,现在要先准备一个数据处理的模块,以便对取出的至进行统计。

可以先准备几个比较常用的,例如列表内同类值 列表内数值求和 字典合并等方法,如果后面再有更复杂的格式,再单独编写。

例:

def TongJiQi(list):

# 列表内容统计器,对列表内的重复项进行数量统计

count_dict = dict()

for item in list:

if item in count_dict:

count_dict[item] += 1

else:

count_dict[item] = 1

return count_dict

def qiuhe(data_list):

"""

对列表内的数值进行求和

:param data_list:

:return:

"""

total = 0

for ele in range(0, len(data_list)):

total = total + data_list[ele]

return total

以上,准备工作就都做好了,下面就要开始真正的写入了

4.3 生成数据并拼装为sql语句

1) 通过生产sql语句数量来控制循环,将sql头与值拼装在一起,并将拼装好的结果进行写入

2) 在循环生成写入值的过程中,将需要统计或计算的值取出单独保存,在写入结束后再进行技术统计输出统计结果

def write_sql(prov, city, des_prov, des_city)

# 通过配置文件获取sql头

sql = config_util.get_config_data('veh_scrap', 'pack_out')

# 控制循环

i = 0

# 创建列表,用于收集需要统计计算的数据

company_num = []

des_company_num = []

while i < sql_num:

i += 1

# 取生成的values值

data = _crap_out(prov, city, des_prov, des_city)

# 收集需要统计的数据

company_num.append(data[8])

des_company_num.append(data[4])

# 拼装sql语句

sql = sql + str(tuple(data)) + ','

# 最后一组数据后的,删除掉

right_sql = sql.strip(',')

# 拼装上结尾的; fullsql作为返回值

full_sql = right_sql + ';'

# print(full_sql)

# 执行写入

pymysql_util.execut_sql(full_sql)

print('上报企业统计: ' + str(

statistics_util.TongJiQi(company_num)))

print('去向企业统计: ' + str(

statistics_util.TongJiQi(des_company_num)))

这样一个表的数据就写入成功了,只需要调整写入条数就可以想写入多少条就写入多少条,还可以直接输出你关心的字段统计结果。

多个数据库表的话可以就是将以上的生产数据和写入数据的步骤复制,按照表名和字段稍作修改就可以了。

再将所有表的数据生成和写入都编写完成后,可以编写一个小工具的入口,给自己编写一个选择器

每次只要输入对应的数字就可以执行对应的方法,写入数据并输出统计结果啦

def main(prov, city, sql_num, sour_prov, sour_city):

"""

启动数据自动写入的主方法

:return:

"""

features_type = input("请选择生成数据所属功能模块 1.车辆报废 2.梯次利用 3.资源再生")

if features_type == '1':

scrapped_main.write_sql(prov, city, sql_num, des_prov=sour_prov,

des_city=sour_city)

elif features_type == '2':

echelon_use_main.write_main(prov, city, sql_num, sour_prov, sour_city)

elif features_type == '3':

recycle_main.write_main(sql_num, prov, city, sour_prov, sour_city)

五.总结

以上只是一个工作过程中仓促搞出的一个小东西,还有很多不足。抛转引玉,拿出来跟大家分享一下我的思路,希望能对大家有所帮助!

还有我趟过的坑,也记录一下吧

1.不要只管闷头写,写完一个表的时候就执行试一下,不只要看数据库写进去了 主要是看看要测试的平台能不能看到,之前因为开发忘了跟我说一个字段条件,我全都写完了也执行成功了,但就是上不去平台,最后不得不大改一遍

2.随时跟开发沟通确认任何一个不确定的问题,因为有的表可能会用不到,表内的某些字段没有用,表设计不明确的时候等等,这些时候都要跟他们确认好再继续动手写,防止无用功。

3.这只是辅助测试的工具,要控制住开发工具的时间,防止测试工作的延误。

到此这篇关于详解使用Python写一个向数据库填充数据的小工具(推荐)的文章就介绍到这了,更多相关Python向数据库填充数据的小工具内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客!

python编写数据库连接工具_详解使用Python写一个向数据库填充数据的小工具(推荐)...相关推荐

  1. python zxing 识别条码_详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强...

    前言 这周和大家分享如何用python识别图像里的条码.用到的库可以是zbar.希望西瓜6辛苦码的代码不要被盗了.(zxing的话,我一直没有装好,等装好之后再写一篇) 具体步骤 前期准备 用open ...

  2. python解释器在哪里_详解查看Python解释器路径的两种方式

    进入python的安装目录, 查看python解释器 进入bin目录 # ls python(看一下是否有python解释器版本) # pwd (查看当前目录) 复制当前目录即可 1. 通过脚本查看 ...

  3. 利用python处理dna序列_详解基于python的全局与局部序列比对的实现(DNA)

    程序能实现什么 a.完成gap值的自定义输入以及两条需比对序列的输入 b.完成得分矩阵的计算及输出 c.输出序列比对结果 d.使用matplotlib对得分矩阵路径的绘制 一.实现步骤 1.用户输入步 ...

  4. python登录系统文件版_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    这个是升级的版本,比较进阶一点的,相对与之前的文件管理系统,数据只是存储到了内存中,而不是存储到硬盘上,我们想让文件存储到硬盘上的话,一个是存储到文件里,一个是存储到数据库中,存储到数据库中的版本会后 ...

  5. python 写入excel 日期_详解:Python实现大数据收集至excel的思路大牛分享(建议收藏)...

    一.在工程目录中新建一个excel文件 二.使用python脚本程序将目标excel文件中的列头写入,本文省略该部分的code展示,可自行网上查询 三.以下code内容为:实现从接口获取到的数据值写入 ...

  6. python微博评论爬虫_详解用python写网络爬虫-爬取新浪微博评论 基于Python的新浪微博爬虫研究...

    怎样爬取新浪微博的评论信息 针对八爪鱼在微博的应用上,除了用户信息之外还包括话题内容方面的采集,目前绝大多数企业均在微博设有官方微博,八爪鱼可以协助企业快速及时的抓取与企业产品相关联的话题信息,规则市 ...

  7. python生成随机数方法_详解用python生成随机数的几种方法

    今天学习了用python生成仿真数据的一些基本方法和技巧,写成博客和大家分享一下. 本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的 ...

  8. python numpy 子数组_详解:Python 取numpy数组的某几行某几列方法(含对与错示例)...

    前言: 今天为大家带来的内容是Python 取numpy数组的某几行某几列方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,要是喜欢的话记得点赞转发收藏不迷路哦!!! ...

  9. python hist直方图拟合曲线_详解用Python为直方图绘制拟合曲线的两种方法

    直方图是用于展示数据的分组分布状态的一种图形,用矩形的宽度和高度表示频数分布,通过直方图,用户可以很直观的看出数据分布的形状.中心位置以及数据的离散程度等. 在python中一般采用matplotli ...

最新文章

  1. Glide和Govendor安装和使用
  2. 200kb以上图片储存
  3. 【深度学习】CNN神经网络应用(用于亚洲大黄蜂分类)
  4. 全球开源技术峰会上,第四范式分享OpenMLDB满月成绩
  5. 活动平台为何没有x86?_一个由跨平台产生的浮点数bug | 有你意想不到的结果
  6. 在Linux上编译dotnet cli的源代码生成.NET Core SDK的安装包
  7. c++ 使用socket实现C/S端文件的下载传输
  8. 美国高校开源迄今为止最大新冠肺炎CT数据集
  9. kafka redis vs 发布订阅_发布订阅的消息系统 Kafka的深度解析
  10. html - table分页断行,关于window.print网页分页换页table不断行的处理
  11. log4j:WARN Please initialize the log4j system properly解决办法
  12. SMB、FTP、DNS、等六个服务总结
  13. 基准对象object中的基础类型----元组 (五)
  14. 超详细java中的ClassLoader详解
  15. Sharding-jdbc视频:当Sharding-jdbc遇到Spring Boot
  16. zigbee学习之JN5169系统控制器
  17. 喉咙肿痛症状似流感 常州一男子延误治疗险送命
  18. 【obs-studio开源项目从入门到放弃】windows 窗口采集和桌面采集的解决方案
  19. 喜报接连,闪马智能与创始人兼CEO彭垚斩获猎云网、雷锋网多项奖项
  20. 【日常折腾】重新安装Windows7,做好ghost备份,迁移主目录,日常软件office,chrome,搜狗输入法,电脑管家,一键ghost进行备份。

热门文章

  1. 原来awt是可以设置多个frame
  2. html浮动之后怎么隐藏,div浮动之后排在一行,在把浮动去掉,把div用display设置成inline-block之后就不能排在一行了。...
  3. 加密选项_Word中新建、保存、及文档加密的设置方式
  4. python画画零基础_Python获取英雄联盟皮肤原画:新手玩家们都懵了!
  5. SQL 常用语句大全
  6. cas导入Eclipse中
  7. Android世界第一个activity启动过程
  8. 整合重组叠加市场扩容 “广电云”发展将提速
  9. mysql语法子查询_(十四)MySQL语法-子查询(二)
  10. IC设计EDA软件虚拟机环境配置与安装教程