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生成报表并发送邮件的更多相关文章

  1. Python3安装cx_Oracle连接oracle数据库实操总结

    弄清版本,最重要!!! 首先安装配置时,必须把握一个点,就是版本一致!包括:系统版本,python版本,oracle客户端的版本,cx_Oracle的版本,然后安装配置就容易了! 如果已经安装Pyth ...

  2. hibernate tool连接oracle生成pojo和xml文件无法查询表解决办法

    需要在hibernate的配置文件中增加 <property name="hibernate.default_schema">[username]</proper ...

  3. python3.5连接oracle数据及数据查询

    今天心血来潮研究下用python连接oracle数据库,看了一下demo,本以为很简单,从操作到成功还是有点坎坷,这里分享给大家,希望为后面学习的童鞋铺路. 一.首先按照cx_Oracle 二:在py ...

  4. PowerDesigner连接Oracle数据库(32位)反向生成物理数据模型

    PowerDesigner可以连接Oracle数据库进行反向生成物理数据模型,本文演示操作过程. 环境说明: 1)Windows8.1,Oracle11R2 32位. 2)PowerDesigner1 ...

  5. 利用powerDesigner15.1连接oracle数据库并自动生成表结构

    利用powerDesigner15.1连接oracle数据库并自动生成表结构 参考:http://blog.csdn.net/qq_24531461/article/details/76713802 ...

  6. Python3 连接 Oracle 数据库

    Python3 连接 Oracle 数据库 需要导出一些稍微复杂的数据,用Python处理很方便 环境 Win10 Python 3.7.0 Oracle 11g 安装依赖 安装 cx_Oracle ...

  7. C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类

    C#连接Oracle数据库,通过EF自动生成与数据库表相关的实体类 ps:如需转载,请在转载文章明显处,i标注作者和原文地址 一.准备条件 需要自己电脑上已经安装了Oracle数据库,并且已经创建了相 ...

  8. Linux下通过JDBC连接Oracle,SqlServer和PostgreSQL

    今天正好需要统计三个网站栏目信息更新情况,而这三个网站的后台采用了不同的数据库管理系统.初步想法是通过建立一个小的Tomcat webapp,进而通过JDBC访问这三个后台数据库,并根据返回的数据生成 ...

  9. 制作一个SSRS的ORACLE数据库报表,使用了时间类型的参数。

    需求:我们这个报表是以月为单位,呈现的数据为查询为当前月的第一天到最后一天.条件类似于:time_day > 20140601 and  time_day < 20140630 因为是让用 ...

随机推荐

  1. 简单说说PHP优化

    我们在编写程序时,总是想要使自己的程序占用资源最小,运行速度更快,代码量更少.往往我们在追求这些的同时却失去了很多东西.下面我想讲讲我对PHP优化的理解.优化的目的是花最少的代价换来最快的运行速度与最 ...

  2. JDBC原理之层次结构

    目录 JDBC的层次结构 前言 Collection角色 Statement角色 ResultSet角色 JDBC工作的基本流程 JDBC的层次结构 前言 JDBC API提供了以下接口和类: Dri ...

  3. spring5.0.7.RELEASE配置jackson2.9.5

    概述 Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”. 1.环境: jdk版本:jdk1.8spring版本:5.0.7.RELEASE jackso ...

  4. hadoop datanode 启动正常,但master无法识别(50030不显示datanode节点)

    start-all.sh 启动 坑爹 找不出错 试了各种办法,重新formaet 查看 集群ID是否相同.都无效 日志也没看到错 按官网方法手动一步步启,问题照旧 master节点,yarn name ...

  5. SHELL用法七(Sed语句)

    1.SHELL编程Sed语句案例实战 1)SHELL编程四剑客之二的Sed工具,主要是用于Linux系统文本文件的编辑. 打印的,也称为非交互模式编辑器(vi|vim交互模式编辑器),Sed工具的语法 ...

  6. js 函数的防抖(debounce)与节流(throttle)

    原文:函数防抖和节流: 序言: 我们在平时开发的时候,会有很多场景会频繁触发事件,比如说搜索框实时发请求,onmousemove, resize, onscroll等等,有些时候,我们并不能或者不想频 ...

  7. Python建立web静态服务器

    原文地址:http://www.bugingcode.com/blog/python_html_web_server.html python作为工具,提供了很多好用的命令,比如有时候突然需要建立一个解 ...

  8. python pip配置以及安装工具包的一些方法

    pip是python的一个工具包管理工具,可以下载安装需要的工具包,想要使用它来管理工具包首先要安装pip,安装方法可以参照下面这个网址来进行: https://www.cnblogs.com/Nan ...

  9. WiFi曝出安全漏洞几近“裸奔”:运营商能借机收割一波红利吗?

    ​    作为大众生活中不可或缺的基础架构,也是智能生活普及的推动性力量,运营商的重要性毋庸置疑.但无奈的是,一直以来运营商都似乎是站在了大众的"对立面".看似光鲜亮丽,但在壮观的 ...

  10. Java入门教程十(抽象类接口内部类匿名类)

    抽象类(abstract) 一个类只定义了一个为所有子类共享的一般形式,至于细节则交给每一个子类去实现,这种类没有任何具体的实例,只具有一些抽象的概念,那么这样的类称为抽象类. 在面向对象领域,抽象类 ...