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 pdms = MSSQL(host="localhost",user="test",pwd="test",db="db_jun")args = dict(sourceTB = ['tb2', 'tb1'],# 待导出的表path='D:\\myPC\\Python\\',# 导出到指定路径startRow=1,#设定写入文件的首行,第2行为数据首行isHeader=False,# 是否包含源数据的标题batch=5)# 导出到文件ms.exportToExcel(**args)
5. 总结
本篇主要介绍完成多表(相同表结构)导出数据、分批次写入到同一Excel的实现过程,需要注意使用文件公共句柄、写入行初始化、关键字参数配置等。后续也可以继续扩展,将指定数据源表导出到指定目标文件。
长按扫描关注下方公众号后回复“
excel
”,获取本文全部源码
▼ 点击成为
社区注册会员
「在看」
一下,一起PY!
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居
中
、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图
导出
与导入
导出
导入
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
在java web系统应用
中
我们经常会用到大批量数据的
导出
,动辄就上几十万几百万的数据让我们的程序感觉压力很大,甚至都出现无法
导出
的情况,如内存溢出等。
java
中
使用poi
导出
Excel
大批量数据到客户端
存在两个
导出
方法:存在一个
分
批量
导出
ZIP文件,一个
导出
exel文件
FileInputStream inputStream = null;
StringBuilder xlsFileContent = new StringBuilder();
try {
inputStream = new...
* @param $mpid
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
public function ...
如果你的电脑内存较小那么想在本地做一些事情是很有局限性的(哭丧脸),比如想拿一个kaggle上面的竞赛来练练手,你会发现多数训练数据集都是大几G或者几十G的,自己那小破电脑根本跑不起来。行,你有8000w条样本你牛逼,我就取400w条出来跑跑总行了吧(狡滑脸)。
下图是2015年kaggle上一个CTR预估比赛的数据集:
看到train了吧,原始数据集6个G,特征工程后得多大?那我就取40...
可以使用
Python
的pandas库将
数据库
中
的数据
导出
到
Excel
文件
中
。首先需要连接
数据库
并将数据读入到pandas的DataFrame对象
中
,然后使用to_
excel
()方法将DataFrame对象
导出
到
Excel
文件
中
。以下是一个示例代码:
import pandas as pd
import pymysql
# 连接
数据库
conn = pymysql.connect(host="localhost", user="root", password="password", database="mydb")
#
读取数据
到DataFrame对象
df = pd.read_sql("SELECT * FROM mytable", conn)
#
导出
到
Excel
文件
df.to_
excel
("output.xlsx", index=False)
在上面的示例代码
中
,需要根据实际情况修改
数据库
连接参数和SQL查询语句。to_
excel
()方法的第一个参数是
导出
的文件名,第二个参数index=False表示不
导出
索引列。