刚入门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表格

_user = "user1@abc.com"

_pwd = "123456."

areceiver = "user2@163.com"

acc = "user1@abc.com"

#如名字所示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)

python自动获取邮件数据_Python 提取数据库(Postgresql)并邮件发送相关推荐

  1. python tushare获取股票数据_Python 金融: TuShare API 获取股票数据 (1)

    多多教Python 金融 是我为金融同行,自由职业投资人 做的一个专栏.这里包含了我自己作为量化交易员,在做研究时所用到的Python技巧和实用案例.这个栏目专业性会比较强:本人29岁,量化工作5年的 ...

  2. python如何获取股票数据_Python|一行代码获取股票数据

    随着金融行业的发展,金融相关的数据变得越来越有价值.股票的历史数据就是一种非常重要的时间序列数据,本文介绍一个不需要自己动手写爬虫就能够获取各个公司的股票信息的Python库--yfinance. 0 ...

  3. python获取同花顺数据_Python提取Wind数据

    果然是中文编码的问题.搞定了,新鲜出炉一个小脚本.谢谢各位大神的解答. """ @Author: wenrongli @Date: 2014-11-18 @Version ...

  4. python tushare获取股票数据_python调用tushare获取沪股通、深股通成份股数据

    接口:hs_const 描述:获取沪股通.深股通成分数据 注:tushare库下载和初始化教程,请查阅我之前的文章 输入参数 名称      |      类型      |      必选      ...

  5. python刷新获取实时数据_Python实时数据更新解决方法

    比如,实现一块区域专门进行最新留言的展示.. 每次有最新的留言就把它显示在上面.. (比如人人影视右下角的"精彩评论", 不知道是不是实时的) 再比如,做一个网站,抓取其他网站上的 ...

  6. 用python做生物信息数据分析_基于Python的自动获取生物信息数据的软件设计

    基于 Python 的自动获取生物信息数据的软件设计 * 周斯涵,刘月兰 ** [摘 要] [摘 要] 从国际生物信息学数据库中采集数据来进行相关领域的分析, 但随着数据库规模不断扩大 , 数据来源种 ...

  7. python爬取证券数据并存入数据库

    用python爬虫爬取数据并存到数据库 1----------------------------------------------------------------------编写爬虫,下载数据 ...

  8. Python自动获取QQ群消息

    由于WebQQ关闭了,无法通过webQQ来自动的获取QQ中的消息,故采用模拟人查看消息的操作方式来实现自动获取消息.通过调用win32实现窗口监听,找到需要获取的消息窗口句柄,再通过模拟Ctrl+C和 ...

  9. python金融数据怎么获取_class类怎样在python中获取金融数据?

    我们搜集金融数据,通常想要的是利用爬虫的方法.其实我们最近所学的class不仅可以进行类调用,在获取数据方面同样是可行的,很多小伙伴都比较关注理财方面的情况,对金融数据的需要也是比较多的.下面就cla ...

最新文章

  1. 常用的CSS(收集)
  2. [GYM 100492A] Average Convex Hull 凸包好题
  3. 程序基础:数据结构(郝斌讲解)(2)
  4. 阅读php程序设计笔记
  5. 线性代数-矩阵-转置 C和C++的实现
  6. Android MotionEvent中getX()、getRawX()和getTop()的区别
  7. Python第3次作业
  8. 计算机文化基础习题及答案
  9. 基于android的手机选课系统的实现
  10. 在线制作banner
  11. guzzlehttp5.3 and guzzlehttp6.7 , 同时共存。同时安装2个版本guzzlehttp
  12. Oracle 11g中文繁体特殊乱码问题解决
  13. mysql 取分组中最新记录
  14. MATLAB如何输出图形到CAD或者UG,ug里面怎么导出cad图形
  15. 游戏中的道具与RMB玩家
  16. 合同和协议的区别_合同的内容包括哪些,合同和协议的区别
  17. 2021年中国水果罐头行业进出口贸易及发展前景分析[图]
  18. ACM简单计算题-装箱问题
  19. html 输入数字冒泡,Html5 冒泡排序演示
  20. 公司员工信息管理系统

热门文章

  1. SpringBoot项目启动失败: is not eligible for getting processed by all BeanPostProcessors (for example: not)
  2. CASS9.2启动提示连接数据库失败的解决方案
  3. Winrar制作自解压安装程序
  4. 计算机软件基础自考实践报告,信息作战自考实践报告
  5. Linux三大剑客之sed
  6. 2022 计网复习计算题【太原理工大学】
  7. 雨夜,谁动了你的雨伞他的心房?
  8. 数据结构实验整理(一)
  9. 【数据结构】格洛克怎么上膛?栈的结构帮你解答!
  10. 用断点续存实现视频快速上传