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

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

通过数据库设置七个人的角色权限

再通过接口发送请求(1、2是本文所实现的功能)

下载文件到本地

文件批量解压

根据解压后的文件中的内容重命名文件

将重命名后的文件分类放到不同的文件夹中

再将不同的文件夹打包(4~7完成了一部分,但有些问题一直没解决,头疼中。。。。)

通过微信将压缩包发给需要的人(待定,或者是使用邮件发送?)

现在设想的就分这么多步骤,需要使用到的库涵盖了数据库操作、发送请求、下载文件(连接服务器)、文件的解压缩、文件的读取、重命名以及发送微信文件或邮件,可以说相当全面了,全部完成后肯定会对自己的水平提升有很大帮助。好了,背景交代完毕,上代码!(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

你可能感兴趣的:(python如何批量导出数据)