利用Python将数据库查询结果导出为EXCEL,CSV,TSV格式(性能比Kettle高接近1倍)

虽然可以用Kettle等ETL工具将数据库查询结果导出为EXCEL,CSV,TSV格式

但是Kettle等ETL工具导出效率太慢,实测本人写的Python脚本导出效率快高出Kettle一倍

import cx_Oracle
import os
import csv
import time
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'  #避免中文乱码
conn = cx_Oracle.connect('scott/[email protected]/orcl') #使用scott/tiger 连接到192.168.3.13
cur = conn.cursor()                                       #定义一个游标用来执行DDL,DML,SELECT语句
cur.arraysize = 1000                                      #提升SELECT返回大量数据性能
header=[]                                                 #定义一个list变量用来保存表头
table_name=input("请输入要导出的表名:")                      #从键盘获取要导出的表名称
ifwriteheader=input("是否导出表头(y,n):")                   #从键盘获取是否导出表头,y表示导出表头,n表示不导出表头
cur.execute('select * from '+table_name+' where 1=0')     #执行SELECT,获取表结构
for col_len in range(0,len(cur.description)):             #循环遍历
 header.append(cur.description[col_len][0])               #将表头添加到变量header
cur.execute('select * from '+table_name)                  #执行SELECT
print('开始导出:',time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
with open('csvfile.txt','w',newline='')as csvfile:        #csvfile.txt改成csvfile.csv表示导出为excel 如果不加newline='' 每导出一行就有空的行
 if ifwriteheader=='y':
  writer= csv.DictWriter(csvfile,fieldnames=header)        #用来写表头
  writer.writeheader()                                     #用来写表头
 file = csv.writer(csvfile,delimiter=',')                 #delimiter默认是’,‘ 如果delimiter=' ' 表示导出为tsv
 while True:
  rows=cur.fetchmany()                                    #每次获取cur.arraysize行数据
  file.writerows(list(rows))
  if not rows:
     break                                                #中断循环
cur.close()                                               #关闭游标
conn.close()                                              #关闭连接
print('导出完成:',time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

想不想成为SQL大神?想不想精通SQL优化,精通所有关系型数据库优化?

加我微信692162374 报名单独辅导 , 顺带我还可以教你Python,Oracle,MySQL,以及大数据

 

你可能感兴趣的:(Python)