刚入门python,发现确实是一个不错的语言。

业务部门要求将将某一个数据库中的表,定期发送到相关部门人员邮箱。

其实整个业务需求很简单,实现起来也不难。

但是由于刚入门python,所以还是借鉴了不上网上的内容,也得到了许多群友的提醒。

业务部门使用的是Postgresql数据库,所以使用 了psyconpg2的模块。

整个脚本分为三部分:

1.数据库的连接及数据写入excel表中(整个对新手来说,应该是难点)

2.邮件的发送

3.生成excel文件的删除

# coding: utf-8

import sys

import xlwt

import psycopg2

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

#连接数据库的参数:主机,用户,密码,端口及数据库名称

host = '192.168.1.77'

user = 'postgres'

pwd = 'postgres'

port = 5432

db = 'pytest'

sheet_name = 'report' + time.strftime("%Y-%m-%d")

filename = 'report_' + time.strftime("%Y-%m-%d" + "-" + "%H%M%S") + '.xls'

out_path = "d:/test/report_" + time.strftime("%Y-%m-%d" + "-" + "%H%M%S") + ".xls" #路径文件名使用日期时间来命名,但是文件命名不支持冒号:所以去掉冒号

cur_path = 'd:/test'

print(out_path)

sql = 'select * from website;'

def export():

#数据库连接

conn = psycopg2.connect(dbname=db, user=user, password=pwd, host=host, port=port)

cursor = conn.cursor()

cursor.execute(sql)

result = cursor.fetchall()

count = cursor.rowcount

print("Select " + str(count) + " Records")

# cursor.scroll(0, mode='relative')

fields = cursor.description #数据表的标题

workbook = xlwt.Workbook(encoding='utf-8') #创建excel文档

sheet = workbook.add_sheet(sheet_name, cell_overwrite_ok=True) #根据sheet_name创建excel文档的sheet

for field in range(1, len(fields)): #写入数据表的文件头

sheet.write(0, field, fields[field][0])

#逐行逐列的添加数据

for row in range(1, len(result) + 1):

for col in range(0, len(fields)):

sheet.write(row, col, u'%s'%result[row-1][col])

workbook.save(out_path) #按照out_path的格式和路径保存excel表格

_pwd = "123456."

#如名字所示Multipart就是多个部分

msg = MIMEMultipart()

msg["Subject"] = u'[Data Select_' + time.strftime("%Y-%m-%d") + u']'

msg["From"] = _user

msg["To"] = areceiver

msg["Cc"] = acc

def send_email():

conn = psycopg2.connect(dbname=db, user=user, password=pwd, host=host, port=port)

cursor = conn.cursor()

cursor.execute(sql)

cursor.fetchall()

count = cursor.rowcount # summary rows number

# ----这是文字部分-----

content = '''Dear All, \n附件是每日统计情况,请查收!

总计结果数位:''' + str(count)

part = MIMEText(content, 'plain', 'utf-8')

msg.attach(part)

if count > 0:

#这是附件部分

# xls类型附件

file_name = 'd:/test/' + 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('utf-8')

part['Content-Disposition'] = 'attachment; filename=%s' % basename

# part.add_header('Content-Disposition', 'attachment', filename=('utf-8', basename))

msg.attach(part)

s = smtplib.SMTP('mail.ucinbox.com', timeout=120) #连接smtp邮件服务器

s.login(_user, _pwd)

s.sendmail(_user, areceiver.split(',') + acc.split(','), msg.as_string()) # send mail

print("Email send successfully")

s.close()

else:

print("nothing to send!")

#删除生成的excel文件

# 之前使用的是将不同的excel放入不同的文件夹,所以写了遍历删除所有excel

def delete(path):

ls = os.listdir(cur_path)

for l in ls:

path_file = os.path.join(path,l) #取文件路径

if os.path.isfile(path_file):

os.remove(path_file)

else:

for f in os.listdir(path_file):

path_file2 = os.path.join(path_file,f)

if os.path.isfile(path_file2):

os.remove(path_file2)

#调用函数

if __name__ == "__main__":

export()

send_email()

delete(cur_path)

原文:http://blog.51cto.com/c1813/2152514

python收集数据发邮件_Python 提取数据库(Postgresql)并邮件发送相关推荐

  1. Python量化数据仓库搭建系列1:数据库安装与操作

    Python量化数据仓库搭建系列1:数据库安装与操作 本系列教程为量化开发者,提供本地量化金融数据仓库的搭建教程与全套源代码.我们以恒有数(UDATA)金融数据社区为数据源,将金融基础数据落到本地数据 ...

  2. python曲线图数据爬取_python爬取二手房库存,存数数据库,生成折线图(上)

    python爬取二手房库存,存数据库,生成折线图(上) 想着快要买房了,可是房价又那么的贵.那么为啥不是自己爬点二手房的价格走势图.看看那里的房子适合自己(虫啊!!!) 打算用python3 djan ...

  3. python向自己qq邮件发信息_python实现自动向QQ邮箱发送天气预报邮件

    今天是清明长假的最后一天了,趁着这点空余的时间想来做点有意思的东西,之前做12306自动购票程序的时候就想加入一个功能,就是抢票成功后实现自动向指定的邮箱里面发送提醒信息的邮件,功能还是很简单的,今天 ...

  4. python email模块详解_Python使用email模块对邮件进行编码和解码的实例教程

    解码邮件python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用. 处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件 ...

  5. python壁纸数据抓取_python爬虫多线程实战:爬取美桌1080p壁纸图片

    本人纯手工码字哦,请耐心看完,有信心可以带你完整学会这个实战案例 一.需求分析: 1.下载 http://www.win4000.com/wallpaper.html 下指定分类 指定尺寸 的图片 2 ...

  6. python中文显示不出来_Python查询数据库,中文的结果显示不出来

    表里面的数据: 问题:查询数据库,返回结果不是中文可以,是中文的话就报错UnicodeEncodeError: 'gbk' codec can't encode character '\xd4' in ...

  7. python分析数据走势图_python对股市进行数据分析-tushare篇

    数据准备 TuShare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程,能够为金融分析人员提供快速.整洁.和多样的便于分析的数据,为他们 ...

  8. python查看数据最后五行_python数据分析

    一.数据导入和导出 (一)读取csv文件 1.本地读取 import pandas as pd df = pd.read_csv('E:\\tips.csv') 2.网络读取 import panda ...

  9. python训练营微信广告发送机_python实现给微信公众号发送消息的方法

    本文实例讲述了python实现给微信公众号发送消息的方法.分享给大家供大家参考,具体如下: 现在通过发微信公众号信息来做消息通知和告警已经很普遍了.最常见的就是运维通过zabbix调用shell脚本给 ...

最新文章

  1. Windows 2008 ×××与 CA
  2. SwiftUI区分浅色和深色
  3. android 入门-工序
  4. sed 格式化输出df -h
  5. Debug enterprise search menu
  6. bootstrap评分插件 Bootstrap Star Rating Examples
  7. .Net Core 2.2升级3.1的避坑指南
  8. Unable to execute dex: Multiple dex files define 解决方法
  9. php获取网页输出,PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)_PHP教程
  10. java不要无限循环_java – 看似无限循环终止,除非使用System.out.println
  11. 科研|我最煎熬的学术时刻,是耗时3年完成了一篇论文
  12. 关于Autorun.inf文件
  13. HDOJ2003求绝对值
  14. CodeVS 1014 装箱问题(DP)
  15. ros机器人编程实践(12.2)- 用turtlebot仿真巡线机器人
  16. 用Cyberduck将4EVERLAND Bucket挂载到本地,构建属于自己的Web3云网盘
  17. vue如何设置 网页标题 关键字 描述
  18. Vue 富文本wangEditor3 (自动保存 快捷保存 激活工具栏...
  19. Python可视化34|matplotlib-多子图绘制(为所欲为版)
  20. 推荐十四款常见的Web前端开发框架

热门文章

  1. 如何使用MySQL进行备份?
  2. 微信小程序API之getSystemInfo
  3. three.js 后期处理,物体高亮
  4. saas系统是什么_什么是灵活用工智能财税SaaS系统?有什么好处?
  5. git merge;fork同步集中库代码;a标签返回
  6. linux oracle 10g dataguard 实施详细记录
  7. C++位运算:求 int 绝对值
  8. 【数据结构笔记20】图的定义,图的表示:邻接矩阵与邻接表
  9. mysql实战数据.sql_Mysql实战(DML增删改+Select)
  10. html盒子优先级设置,CSS 基础(盒模型、选择器、权重、优先级)