文/张俊 投稿 图片来源于网络
本文目录
1. 应用场景2. 功能事项3. 主要实现概览主要方法4. 使用示例5. 总结
1. 应用场景
最近经常需要手工从后台数据库导出某些数据表到Excel文件,而且源数据表的数据量大小不一,导致在导出到本地文件这个过程中需要根据情况来调整每个批次的写入数据量。为了避免反复的手工操作、高效率到多份离线数据,便做了这个小工具来一键完成任务。
2. 功能事项
支持一次性导出多个数据源表、自动获取各表的字段名。
支持控制批次的写入速率。例如:每5000行一个批次写入到excel。
支持结构相同的表导入到同一个Excel文件。可适用于经过水平切分后的分布式表。
3. 主要实现
概览
A[创建类] -->|方法1| B(创建数据库连接)
A[创建类] -->|方法2| C(取查询结果集)
A[创建类] -->|方法3| D(利用句柄写入Excel)
A[创建类] -->|方法4| E(读取多个源表)
B(创建数据库连接) -->U(调用示例)
C(取查询结果集) -->U(调用示例)
D(利用句柄写入Excel) -->U(调用示例)
E(读取多个源表) -->U(调用示例)
主要方法
def __init__(self,host,user,pwd,db):
self.host = host
self.user = user
self.pwd = pwd
self.db = db
def __getConn(self):
if not self.db:
raise(NameError,'没有设置数据库信息')
self.conn = pymssql.connect(host=self.host, user=self.user, password=self.pwd, database=self.db, charset='utf8')
cur = self.conn.cursor()
if not cur:
raise(NameError,'连接数据库失败')
else:
return cur
writer = pd.ExcelWriter(file)
df_fetch_data[rs_startrow:i*N].to_excel(writer, header=isHeader, index=False, startrow=startRow)
def exportToExcel(self, **args):
for sourceTB in args['sourceTB']:
arc_dict = dict(
sourceTB = sourceTB,
path=args['path'],
startRow=args['startRow'],
isHeader=args['isHeader'],
batch=args['batch']
)
print('\n当前导出的数据表为:%s' %(sourceTB))
self.writeToExcel(**arc_dict)
return 'success'
4. 使用示例
如下是调用样例。先用类MSSQL创建对象,再定义关键字参数args,最终调用方法导出到文件即完成数据导出。
import pandas as pd
ms = MSSQL(host="localhost",user="test",pwd="test",db="db_jun")
args = dict(
sourceTB = ['tb2', 'tb1'],
path='D:\\myPC\\Python\\',
startRow=1
,
isHeader=False,
batch=5
)
ms.exportToExcel(**args)
5. 总结
本篇主要介绍完成多表(相同表结构)导出数据、分批次写入到同一Excel的实现过程,需要注意使用文件公共句柄、写入行初始化、关键字参数配置等。后续也可以继续扩展,将指定数据源表导出到指定目标文件。
长按扫描关注下方公众号后回复“excel”,获取本文全部源码
▼ 点击成为社区注册会员 「在看」一下,一起PY!