[Python]查询oracle导出结果至Excel并发送邮件
环境:Linux +python2.7+oracle11g
1、提前安装xlwt(excel写入操作模块),cx_Oracle(oracle操作模块)
cx_Oracle的安装步骤详见链接:https://segmentfault.com/a/1190000009878547
2、脚本如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
reload(sys)
sys.setdefaultencoding('utf8')
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
import cx_Oracle
import xlwt
import datetime
import time
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import os.path filename = 'report_'+time.strftime("%Y-%m-%d")+'.xls'
out_path = '/data/shell/report_'+time.strftime("%Y-%m-%d")+'.xls'
print(out_path) sheet01 = 'report'+time.strftime("%Y-%m-%d")
#获取发布时间与系统时间为同一个月的数据
sql01="select * from xxxxx where to_char(publish_time,'yyyy-mm-dd')=to_char(sysdate, 'yyyy-mm-dd'); " workbook = xlwt.Workbook(encoding = 'utf-8') # workbook是sheet赖以生存的载体。
def main(sql,sheet,sheet_name):
conn = cx_Oracle.connect("user/passwd@ip/sid")
cursor =conn.cursor()
result = cursor.execute(sql) #搜取所有结果
results = cursor.fetchall()
# 获取MYSQL里面的数据字段名称
fields = cursor.description
sheet = workbook.add_sheet(sheet_name,cell_overwrite_ok=True)
# 写上字段信息
for field in range(0,len(fields)):
sheet.write(0,field,fields[field][0])
# 获取并写入数据段信息
row = 1
col = 0
for row in range(1,len(results)+1):
for col in range(0,len(fields)):
sheet.write(row,col,u'%s'%results[row-1][col])
workbook.save(out_path) _user = "xxx@qq.com"
_pwd = "passwd"
areceiver = "xxx@qq.com" #收件人员
acc = "xxx@qq.com" #抄送人员 #如名字所示Multipart就是分多个部分
msg = MIMEMultipart()
msg["Subject"] =u'【数据统计_' + time.strftime("%Y-%m-%d") + u'】'
msg["From"] = _user
msg["To"] = areceiver
msg["Cc"] = acc def send_email():
#---这是文字部分---
content = '''Deal all,\n附件是数'''
part = MIMEText(content,'plain','utf-8')
msg.attach(part)
#---这是附件部分---
#xls类型附件
file_name = '/data/shell/' + filename
part = MIMEText(open(file_name,'rb').read(), 'base64', 'gb2312')
part["Content-Type"] = 'application/octet-stream'
basename = os.path.basename(file_name)
part["Content-Disposition"] = 'attachment; filename=%s' % basename.encode('gb2312')
msg.attach(part)
s = smtplib.SMTP("smtp.qq.com", timeout=30)#连接smtp邮件服务器,端口默认是25
s.login(_user, _pwd)#登陆服务器
s.sendmail(_user, areceiver.split(',') + acc.split(','), msg.as_string())#发送邮件
print("Email send successfully")
s.close() if __name__ == '__main__':
main(sql01,sheet01,sheet01)
send_email()
Oracle获取当月或上个月、下个月
add_months()函数 参数 负数 代表 往前 正数 代表 往后。 --当月
select to_char(sysdate,'yyyymm') from dual;
--上一个月
select to_char(add_months(trunc(sysdate),-1),'yyyymm') from dual;
--下一个月
select to_char(add_months(trunc(sysdate),1),'yyyymm') from dual;
相关链接:https://blog.csdn.net/u013519551/article/details/46632537
https://blog.csdn.net/mindmb/article/details/7898528
https://blog.csdn.net/my2010sam/article/details/21005941
[Python]查询oracle导出结果至Excel并发送邮件的更多相关文章
- [Python]查询mysql导出结果至Excel并发送邮件
环境:Linux +python2.7+mysql5.6 1.提前安装xlwt(excel写入操作模块),MySQLdb(mysql操作模块) 2.脚本如下: #!/usr/bin/python #c ...
- [ES]Python查询ES导出数据为Excel
版本 elasticsearch==5.5.0 python==3.7 说明 用python查询es上存储的状态数据,将查询到的数据用pandas处理成excel code # -*- coding: ...
- python连接oracle导出数据文件
python连接oracle,感觉table_list文件内的表名,来卸载数据文件 主脚本: import os import logging import sys import configpars ...
- python将oracle数据库保存到excel
上代码: import pandas as pd import SqlHelper.ORACLE as ORA if __name__ == '__main__': #连接数据库 ms = ORA.O ...
- 20170506计划-----(基于python查询oracle语句)
在日常的工作中,经常接到开发同事查询生产SQL的请求,公司又不允许对开发开放查询SQL的权限,并且查询的堡垒机又很慢,计划做一个可以自动查询SQL的小工具,一周内完成吧. 大概功能实现了,一些涉及敏感 ...
- 使用python脚本从数据库导出数据到excel
python从数据库导出数据到excel 最近需要从数据库里导出一些数据到excel,刚开始我是使用下面的命令 select * from xxx where xxx into outfile 'xx ...
- Python连接Oracle数据查询导出结果
python连接oracle,需用用到模块cx_oracle,可以直接pip安装,如网络不好,可下载离线后本地安装 cx_oracle项目地址:https://pypi.org/project/cx_ ...
- Python实战 :2017国考职业表excel转数据库,再查询生成excel
最近看2017年国考的职业表,多而杂,不好过滤我想要的信息,特此把它转成Sqlite3数据库,再从数据库里把查询结果导出成excel,方便找职业. (后附上整套代码) 环境:python2.7 x ...
- 如何使用python将MySQL中的查询结果导出为Excel----xlwt的使用
如何在MySQL中执行的一条查询语句结果导出为Excel? 一.可选方法 1.使用sql yog等远程登录,执行查询语句并导出结果集为Excel 适用于较简单的查询结果集的导出 如果需要多个SQL语句 ...
随机推荐
- useradd语法2
在Linux中 useradd 命令用来创建或更新用户信息. useradd 命令属于比较难用的命令 (low level utility for adding users),所以 Debian 系的 ...
- idea设置代码块
转:https://blog.csdn.net/boy_Kenny/article/details/55223078?utm_source=blogxgwz4 idea设置代码块 1.代码模板场景介绍 ...
- c++ 网络库
1.libevent 2.boost::asio 3.ace boost::asio以前看过,不过忘记了 学习,学习
- 2java判断素数
package com.test; import java.math.*;import java.util.Scanner; public class test222 { /** * @param a ...
- 初学vue----动画过渡transition简单部分
使用动画效果要用transition包裹,transition(<trsnsition name="xx"><div></div></tr ...
- 一台服务器绑定多个ip地址
一台服务器绑定多个ip地址. 方法一: 使用标准的网络配置工具(比如ifconfig和route命令)添加lP别名: 在eth0网卡再绑定一个ip:192.168.101.103 /sbin/ifco ...
- #学习笔记#jsp
jsp简介 JSP(Java Server Pages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据. jsp: 作为请求发起页面,例如显示表单.超链接. : ...
- c#泛型TryParse类型转换
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- 1.1 VMware简介
VMware是真正“同时”运行,多个操作系统在主系统的平台上,像标准Windows应用程序那样切换.而且每个操作系统你都可以进行虚拟的分区.配置而不影响真实硬盘的数据,通过网卡将几台虚拟机用网卡连接为 ...
- 4、Linux常用命令
1.查看端口占用(8080) lsof -i:8080 2.杀死进程PID kill -9 41726 3.查看防火墙状态 firewall-cmd --state 4.停止防火墙 systemctl ...