python3.4.3 连接Oracle生成报表并发送邮件
python很简单,又很实用。当有需求时用起来会更有方向,大可不必从语法、循环等基础看起。
由于工作需要,每天要拉一份报表发给业务的同事,先是用SSIS做了个包部署到服务器上,每天定时拉报表发邮件给同事。为了学一学python,就改写了一份。
从安装python-连接数据库-生成excel-发送邮件,一步步试下来,成功的我真是满心欢喜呀。特地记下来。
import smtplib
import email.mime.multipart
import email.mime.text
import email.mime.base
import os.path
import cx_Oracle
import xlwt
import time #生成excel文件名
v_curr_time = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
v_file_name = '星巴克活动报表-'+ v_curr_time + '.xls ' #连接数据库
conn = cx_Oracle.connect("mobileapp2","mobileapp2","RAC01")
cur1 = conn.cursor() #组查询语句,如果是多行结尾需要加反斜杠连接
v_sql = "SELECT xxx "\
"FROM xxx "\
"WHERE xxx "
print (v_sql)
cur1.execute(v_sql)
rows = cur1.fetchall()
v_cnt = len(rows) #生成excel文件
book=xlwt.Workbook()
sheet1=book.add_sheet('Sheet1') #把列名当作一行数据写入
sheet1.write(0,0,'银行交易时间')
sheet1.write(0,1,'手机号')
sheet1.write(0,2,'金额')
sheet1.write(0,3,'姓名') #当查出多列数据时,需要一个cell一个cell的写入,要不然这四列就会写到excel的一个cell里
for i in range(len(rows)):
for j in range(4):
#print (rows[i][j])
#print ("--------")
sheet1.write(i+1,j,rows[i][j]) book.save(v_file_name)
cur1.close()
conn.close() #邮件信息
From = "aaaa@ccc.com"
To = "bbbb@ccc.com"
file_name = v_file_name server = smtplib.SMTP("mail.ccc.com")
server.login("aaaa","password") #仅smtp服务器需要验证时 # 构造MIMEMultipart对象做为根容器
main_msg = email.mime.multipart.MIMEMultipart() # 构造MIMEText对象做为邮件显示内容并附加到根容器
#v_str = "星巴克活动报表,数据共" + v_cnt + "行"
text_msg = email.mime.text.MIMEText("理财APP星巴克活动报备,昨日首投数据,请查收,谢谢。")
main_msg.attach(text_msg) # 构造MIMEBase对象做为文件附件内容并附加到根容器
contype = v_file_name
maintype, subtype = contype.split(' ') ## 读入文件内容并格式化
data = open(file_name, 'rb')
file_msg = email.mime.base.MIMEBase(maintype, subtype)
file_msg.set_payload(data.read( ))
data.close( )
email.encoders.encode_base64(file_msg) ## 设置附件头
basename = os.path.basename(file_name)
file_msg.add_header('Content-Disposition',
'attachment', filename = basename)
main_msg.attach(file_msg) # 设置根容器属性
main_msg['From'] = From
main_msg['To'] = To
main_msg['Subject'] = "理财APP:STORY #889::7.17星巴克活动报备 "
main_msg['Date'] = email.utils.formatdate( ) # 得到格式化后的完整文本
fullText = main_msg.as_string( ) # 用smtp发送邮件
try:
server.sendmail(From, To, fullText)
print ("发送成功")
except Exception as e:
print ("发送失败")
print (str(e))
finally:
server.quit()
python3.4.3 连接Oracle生成报表并发送邮件的更多相关文章
- Python3安装cx_Oracle连接oracle数据库实操总结
弄清版本,最重要!!! 首先安装配置时,必须把握一个点,就是版本一致!包括:系统版本,python版本,oracle客户端的版本,cx_Oracle的版本,然后安装配置就容易了! 如果已经安装Pyth ...
- hibernate tool连接oracle生成pojo和xml文件无法查询表解决办法
需要在hibernate的配置文件中增加 <property name="hibernate.default_schema">[username]</proper ...
- python3.5连接oracle数据及数据查询
今天心血来潮研究下用python连接oracle数据库,看了一下demo,本以为很简单,从操作到成功还是有点坎坷,这里分享给大家,希望为后面学习的童鞋铺路. 一.首先按照cx_Oracle 二:在py ...
- PowerDesigner连接Oracle数据库(32位)反向生成物理数据模型
PowerDesigner可以连接Oracle数据库进行反向生成物理数据模型,本文演示操作过程. 环境说明: 1)Windows8.1,Oracle11R2 32位. 2)PowerDesigner1 ...
- 利用powerDesigner15.1连接oracle数据库并自动生成表结构
利用powerDesigner15.1连接oracle数据库并自动生成表结构 参考:http://blog.csdn.net/qq_24531461/article/details/76713802 ...
- Python3 连接 Oracle 数据库
Python3 连接 Oracle 数据库 需要导出一些稍微复杂的数据,用Python处理很方便 环境 Win10 Python 3.7.0 Oracle 11g 安装依赖 安装 cx_Oracle ...
- C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类
C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类 ps:如需转载,请在转载文章明显处,i标注作者和原文地址 一.准备条件 需要自己电脑上已经安装了Oracle数据库,并且已经创建了相 ...
- Linux下通过JDBC连接Oracle,SqlServer和PostgreSQL
今天正好需要统计三个网站栏目信息更新情况,而这三个网站的后台采用了不同的数据库管理系统.初步想法是通过建立一个小的Tomcat webapp,进而通过JDBC访问这三个后台数据库,并根据返回的数据生成 ...
- 制作一个SSRS的ORACLE数据库报表,使用了时间类型的参数。
需求:我们这个报表是以月为单位,呈现的数据为查询为当前月的第一天到最后一天.条件类似于:time_day > 20140601 and time_day < 20140630 因为是让用 ...
随机推荐
- mysql 子查询 合并查询
4.1带In 关键字的子查询 一个查询语句的条件可能落在另一个SELECT 语句的查询结果中. SELECT * FROM t_book WHERE booktypeId IN (SELECT id ...
- UAC table
CREATE TABLE `sys_dept` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', `name` varchar(50) D ...
- 吴裕雄--天生自然python学习笔记:Python3 XML 解析
什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. XML 被设计用来传输和存 ...
- 企业级rancher搭建Kubernetes(采用rancher管理平台搭建k8s)
一.简介 Rancher简介 来源官方:https://www.cnrancher.com/ Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源软件去从 ...
- SimpleTrigger的使用
SimpleTrigger的作用 在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务 使用实例1:距离当前时间4s钟后执行,且执行一次 package com.test.quar ...
- Spring 错误 cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'context:property-placeholder'.
我来说下这个出错的原因吧 eclise中xsd的验证问题Description Resource Path Location Type cvc-complex-type.2.4.c: The matc ...
- Web自动化测试平台设计与落地-概览
引言 自动化金字塔-灵魂手绘版 关于Web自动化测试,投入产出比是一个绕不开的话题,对于走到2017年的测试人,这时候可能已经有很多人会想到著名的自动化测试金字塔.它形象地展示了Mike Cohn对自 ...
- Android studio常用快捷键与设置
1.格式化代码: 命令 快捷键 将代码合并成一行 Ctrl + Shift + J 格式化 Ctrl+Alt+L 2.API函数参数提示:双击选中所要提示的函数,再按F2即可显示函数的使用方法. 3. ...
- mongodb 4.0配置认证模块
use admin db.createUser({user:"root",pwd:"xxx",roles:[{role:"root",db: ...
- OpenGL ES 学习笔记 - Overview - 小旋的博客
移动端图形标准中,目前 OpenGL ES 仍然是比较通用的标准(Vulkan 则是新一代),这里新开一个系列用于记录学习 OpenGL ES 的历程,以便查阅理解. OverView OpenGL ...