刚入门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)

转载于:https://blog.51cto.com/c1813/2152514

Python 提取数据库(Postgresql)并邮件发送相关推荐

  1. python 数据库查询结果邮件提醒_Python实现的查询mysql数据库并通过邮件发送信息功能...

    本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能.分享给大家供大家参考,具体如下: 这里使用Python查询mysql数据库,并通过邮件发送宕机信息. Python代码如下: ...

  2. mysql自带的邮件发送功能_Python实现的查询mysql数据库并通过邮件发送信息功能...

    本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能.分享给大家供大家参考,具体如下: 这里使用Python查询mysql数据库,并通过邮件发送宕机信息. Python代码如下: ...

  3. Linux shell脚本、定时备份mysql数据库、sendMail邮件发送

    数据库备份 定时任务 邮件发送 一.数据库备份 vim /sqlbackup/mysql_backup.sh#!/bin/sh ###定义变量#### date=`date "+%Y-%m- ...

  4. 【Python 应用篇】Email 邮件发送

    一.简单邮件发送 '''程序描述: 该脚本程序,用于完成简单的邮件发送功能 从文本文件中,提取内容,并发送给指定邮箱 ''' '''作者 = xxxxx ''' '''日期 = 2022.05.10 ...

  5. 使用Python自动生成报表以邮件发送

    编程狗在线 自由的编程学习平台 数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的.产品的等等.而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的 ...

  6. python CGI编程、smtp邮件发送、pygame项目创建

    一.GI编程: 运行在服务器上的一段网关接口的程序(如:HTTP服务器,提供同客户端HTML页面的接口). CGI的运行可以通过网页的链接或者URL: 1.使用你的浏览器访问URL并连接到HTTP w ...

  7. 0909回顾会--数据库导出Excel邮件发送

    目录 1.数据据库导出到Excel 1.1需求分析 1.2设计思路与实现 1.2.1 对数据库进行操作 1.2.2服务层实现 1.2.3工具类util 1.数据据库导出到Excel 1.1需求分析 按 ...

  8. linux-自动备份MySQL数据库,并邮件发送

    网站的数据是最重要的,需要我们定期备份,接下来为大家说的就是 定期-自动-备份MySQL数据库,并且压缩后以邮箱发送 大概步骤就是: 1.确保 安装了 sendmail 和 mutt 包(没有安装的话 ...

  9. python提取数据库nosql_用 Python 写一个 NoSQL 数据库

    本文译自 What is a NoSQL Database? Learn By Writing One In Python. 完整的示例代码已经放到了 GitHub 上, 请 点击这里, 这仅是一个极 ...

最新文章

  1. CustomValidator验证控件的ServerValidate事件
  2. 法学教授:洋文凭情结是对教育体制的嘲弄
  3. 227. 基本计算器 II
  4. python文本分词_【Python】使用jieba对文本进行分词
  5. UI素材干货模板|线框图wireframe线框图iOS设计稿
  6. torch.cuda.is_aviaiable() 返回值为False的问题
  7. 深耕小而美的领域,也能过好一生
  8. 如何避免循环中“突兀”的break和continue
  9. 八、JVM视角浅理解并发和锁
  10. 当R遇上Docker的第一步
  11. SVN安装和使用详细教程
  12. 软件项目管理和实施方案
  13. [poj3580]SuperMemo(splay终结题)
  14. 计算机软件是互联网行业吗,中国十大热门专业 互联网行业位居第一
  15. PHP获取以毫秒级为单位获取当前时间
  16. haproxy的frontend/backend和listen区别
  17. 深度学习在文本分类中的应用
  18. windows7、10磁盘分区以及磁盘扩展(详细教程以及注意事项)
  19. Java显示the type xxx is already defined的解决方法
  20. 深信服设备连接linux,deepin官方论坛-深度科技官网旗下网站

热门文章

  1. 我感觉这个书上的微信小程序登陆写得不好
  2. dateframe行列插入和删除操作
  3. HTML DOM知识点补充:
  4. charles修改响应体
  5. SWOT分析是神马?
  6. 运行cmd状态下MySQL导入导出.sql文件
  7. Android SlidingMenu插件的使用
  8. object的classid收集
  9. php bloginfo stylesheeturl,WordPress主题制作–bloginfo函数使用教程
  10. 全国计算机等级考试题库二级C操作题100套(第75套)