登 录
注 册
< 编程语言
Python
Java
Go
SQL
数据结构与算法
极速安装
线程同步与信号量
生产者消费者
Python调用Java
Python自动发送邮件
数据导出工具
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
Python
>>
数据导出工具
数据导出工具
2020-07-04 11:36:10 星期六 阅读:1540
![](/static/images/article_images/1693753879.497128.jpeg) 在实际工作中,经常会遇到业务方需要导出数据库或者集群里部分数据到Excel或者CSV的需求,以下展示了利用Python将MySQL或者Hive数据导出到Excel的通用方法。 注意:一般的数据库连接工具都有导出的功能(比如Navicat),但前提是本地能连接到公司的数据库环境,一般`公司的办公网路跟线上服务器是不通的`。所以就催生了自己写工具的需求。 ####MySQL根据SQL数据导出到Excel ``` from openpyxl import Workbook from datetime import datetime import time import pandas as pd import sql_file as sf import myconfig # 第一种方法,使用openpyxl库 def mysql_to_excel_v1(conn, workbook, sql, filepath, sheet_name="default_sheet"): cursor = conn.cursor() print("[{}] 正在查询:{} ".format(datetime.now(), str(sheet_name))) try: cursor.execute(sql) print("[{}] sql执行成功".format(datetime.now())) results = cursor.fetchall() fields = cursor.description print("[{}] 获取表结构成功".format(datetime.now())) print("[{}] 共找到{}行记录".format(datetime.now(), str(len(results)))) # 把表头加进一个list里 lst = [] for field in range(0, len(fields)): lst.append(fields[field][0]) # 创建一个sheet sheet = workbook.create_sheet(str(sheet_name), index=0) # 把表头写进Excel里 sheet.append(lst) # 把数据写进Excel里 for result in results: sheet.append(list(result)) workbook.save(filepath) print("[{}] Excel保存成功".format(datetime.now())) except Exception as e: print("[{}] 写入失败,失败原因:{}".format(datetime.now(), str(e))) finally: cursor.close() # 使用pandas导出 def mysql_to_excel_v2(sql, conn, filepath, sheet_name="default_sheet"): try: df = pd.read_sql(sql, conn) print("[{}] sql执行成功".format(datetime.now())) df.to_excel(filepath, sheet_name=sheet_name, index_label=False, index=False, encoding="GB18030") print("[{}] Excel保存成功".format(datetime.now())) except Exception as e: print("[{}] 写入失败,失败原因:{}".format(datetime.now(), str(e))) if __name__ == "__main__": # excel文件导出路径 workbook = Workbook() filepath = "/Users/libins/Desktop/{}.xlsx".format(str(time.asctime())) # 获取配置文件 apollo = myconfig.Apollo() conn = apollo.get_mysql_conn() sql = "SELECT * FROM tablename;" # 使用第一种方法导出 # mysql_to_excel_v1(conn, workbook, sql, filepath) # 使用第二种方法导出 mysql_to_excel_v2(sql, conn, filepath) ``` ####Hive根据SQL数据导出到Excel ``` # -*- coding: utf-8 -*- """ ------------------------------------------------- FileName : hive_to_excel Author : libins CreateDate : 2020/6/3 SoftWare : Visual Studio Code Description : ------------------------------------------------- """ from pyhive import hive import pandas as pd from datetime import datetime # hiveServer2基本配置信息 HOST = "ip" PORT = "7001" USERNAME = "hadoop" DATABASE = "ods" AUTH = "NONE" # 验证方式 class HiveToExcel(): def __init__(self, host, port, username, database, auth): self.conn = hive.Connection(host=host, port=port, username=username, database=database, auth=auth) # 使用pandas导出:传入SQL和导出路径(包含文件名) def hive_to_excel(self, sql, filepath, sheet_name="default_sheet"): try: df = pd.read_sql(sql, self.conn) print("[{}] sql执行成功".format(datetime.now())) df.to_excel(filepath, sheet_name=sheet_name, index_label=False, index=False, encoding="GB18030") print("[{}] Excel保存成功".format(datetime.now())) except Exception as e: print("[{}] 写入失败,失败原因:{}".format(datetime.now(), str(e))) finally: self.conn.close() if __name__ == "__main__": hte = HiveToExcel(HOST, PORT, USERNAME, DATABASE, AUTH) # 需要生成的Excel文件名称 filepath = "hive导出测试.xlsx" # SQL尾部不用写分号 sql = """ SELECT * FROM tablename """ hte.hive_to_excel(sql, filepath) ```