【Python】批量导出数据并处理——第一弹

    惯例还是先交代下背景:最近因为工作需要,同事需要一批数据,每次7天7个人所以就是49个文件,虽然数据条数不多,但是处理起来比较麻烦,首先需要设置七个人不同的角色权限——通过接口发送请求,得到存在服务器中的49个文件——下载文件到本地——因为文件是已压缩包形式存在的,所以下载下来后还需要解压、分类、打包后再次发送,预想将上述的步骤全通过代码来实现主要可以分以下几部分:

  1. 通过数据库设置七个人的角色权限
  2. 再通过接口发送请求(1、2是本文所实现的功能)
  3. 下载文件到本地
  4. 文件批量解压
  5. 根据解压后的文件中的内容重命名文件
  6. 将重命名后的文件分类放到不同的文件夹中
  7. 再将不同的文件夹打包(4~7完成了一部分,但有些问题一直没解决,头疼中。。。。)
  8. 通过微信将压缩包发给需要的人(待定,或者是使用邮件发送?)

   现在设想的就分这么多步骤,需要使用到的库涵盖了数据库操作、发送请求、下载文件(连接服务器)、文件的解压缩、文件的读取、重命名以及发送微信文件或邮件,可以说相当全面了,全部完成后肯定会对自己的水平提升有很大帮助。好了,背景交代完毕,上代码!(PS. 其实批量发送接口请求这部分功能之前已经通过Jmeter或SoapUI实现了,此次算是通过第三种方法实现一下吧!)

1、首先来看下实现该部分功能的文件结构吧!

2、数据库操作相关,用到的库是pymysql,代码如下:

# -*- coding:UTF-8 -*-

import pymysql

class Sql():

	def __init__(self,host,port,database,user,password):

		try:
			self.db = pymysql.connect(host=host,port=port,user=user,password=password,database=database)
			print('=======Connect Success!=======\n')
		except pymysql.Error as e:
			print('Connect Error: %s' %e)

	def update(self,sql):
		cursor = self.db.cursor()
		try:
			self.db.ping(reconnect=True)		# 解决pymysql.err.InterfaceError报错
			cursor.execute(sql)
			self.db.commit()
			print('Update Success!\n')
		except:
			self.db.rollback()

		self.db.close()

3、这部分实现的功能是首先初始化七个用户的角色权限,然后发送请求,用到的库有requests、json、configparser

# -*- coding:UTF-8 -*-

import requests
import json
import configparser
from database import Sql
# import os

def send():
	conf = configparser.ConfigParser()
	conf.read('.\config.ini')
	# 遍历配置文件中的data部分
	user_conf = conf.get('data', 'export_user').split(',')
	data_conf = conf.get('data', 'downloadDate').split(',')

	url = 'http://xxx.xxx.xxx.xx:xxxx/xxxx/xxxx'
	headers = {'content-type': 'application/json'}
	# 遍历config.ini中的user和date,逐条发送post请求,请求体使用json格式
	for name in user_conf:
		for date in data_conf:
			data = {"userId": name, "downloadDates": date}
			req = requests.post(url,data=json.dumps(data),headers=headers)
			print('已发送>>> %s %s 的数据' % (data['userId'], data['downloadDates']))


if __name__ == '__main__':

	# 选择使用的数据库
	db_choice = 'db_test'

	conf = configparser.ConfigParser()
	conf.read('.\config.ini')
	host = conf.get(db_choice,'host')
	port = int(conf.get(db_choice,'port'))
	database = conf.get(db_choice,'database')
	user = conf.get(db_choice,'user')
	password = conf.get(db_choice,'password')

	My_sql = Sql(host,port,database,user,password)
	real_sql = [
		'''UPDATE  `A`.`user` SET `type` = 'xxx', `type_id` = 103 WHERE `user_id` = 'a';''',
		'''UPDATE  `A`.`user` SET `type` = 'xxx', `type_id` = 108 WHERE `user_id` = 'b';''',
		'''UPDATE  `A`.`user` SET `type` = 'xxx', `type_id` = 111 WHERE `user_id` = 'c';''',
		'''UPDATE  `A`.`user` SET `type` = 'xxx', `type_id` = 118 WHERE `user_id` = 'd';''',
		'''UPDATE  `A`.`user` SET `type` = 'xxx', `type_id` = 104 WHERE `user_id` = 'e';''',
		'''UPDATE  `A`.`user` SET `type` = 'xxx', `type_id` = 100 WHERE `user_id` = 'f';''',
		'''UPDATE  `A`.`user` SET `type` = 'xxx', `type_id` = 112 WHERE `user_id` = 'g';'''
	]
	for s in real_sql:
		my_update = My_sql.update(s)

	send()

4、配置文件,文件中的各部分数据进行了隐藏,分测试环境和正式环境,export_user代表七个用户

[db_Online]
host = xxx.xxx.xxx.xx
port = 3306
database = mydatabase
user = myuser
password = mypassword

[db_test]
host = xxx.xxx.xxx.xx
port = 3306
database = mydatabase
user = myuser
password = mypassword

[data]
export_user = a,b,c,d,e,f,g
downloadDate = 2018.08.01,2018.08.02,2018.08.03,2018.08.04,2018.08.05,2018.08.06,2018.08.07

5、正在找怎么通过Jenkins执行这些代码(Jenkins+Jmeter+Ant也完全可以实现),这样项目组里的人就谁都可以完成这项工作了(我才不是因为想要偷懒呢!),待续吧。。。。

 

    写在最后,本人新手菜鸟,代码的严谨性、可读性与简洁性。。。。。好吧,根本就没有这些东西,哈哈哈~~欢迎各位大佬给提意见!

转载自:https://blog.csdn.net/xjian32123/article/details/82665257

You may also like...