Python 提取数据库(Postgresql)并邮件发送

刚入门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 = "[email protected]"

_pwd = "123456."

areceiver = "[email protected]"

acc = "[email protected]"

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

时间: 2024-08-07 08:02:23

Python 提取数据库(Postgresql)并邮件发送的相关文章

python学习笔记(SMTP邮件发送)

想着给框架添加邮件发送功能.所以整理下python下邮件发送功能 首先python是支持邮件的发送.内置smtp库.支持发送纯文本.HTML及添加附件的邮件 之后是邮箱.像163.qq.新浪等邮箱默认关闭SMTP服务,需要我们手动打开 打开后通过发件人邮箱.授权密码 通过发件人的SMTP服务发送 代码如下: 1 #!/usr/bin/env python 2 # -*- coding: utf_8 -*- 3 4 from email.mime.text import MIMEText 5 fr

python 项目实战之Django 邮件发送

发送邮件¶ 虽然 Python 借助 smtplib 模块简化了发送邮件的流程,但是 Django 在其基础上提供了更简化的支持.这些封装意在加快邮件发送,方便在开发时测试发送邮件,在不支持 SMTP 的平台上支持发送邮件. 官网:https://docs.djangoproject.com/zh-hans/2.2/topics/email/ 这些代码位于 django.core.mail 模块. 快速上手 仅需两行代码: from django.core.mail import send_ma

Python脚本通过邮件发送zabbix报警图片

Python脚本通过邮件发送zabbix报警图片流程如下: 通过zabbix传递给脚本的message参数,筛选出报警信息的itemid; 通过获取的itemid,在数据库中查找对应的grpahid; 拉取对应graphid的图片并保存; 将报警信息和图片组装成html; 发送邮件. Python脚本如下: #!/usr/bin/python #coding=utf-8 from email.mime.text import MIMEText from email.mime.multipart 

python邮件发送开服记录

#-*-coding:utf-8 -*- #!/usr/bin/python import sys reload(sys) # reload 才能调用 setdefaultencoding 方法 sys.setdefaultencoding('utf-8') # 设置 'utf-8' import MySQLdb import houtai_dbname from email.mime.text import MIMEText from email.header import Header im

python邮件发送

在基于互联网的应用中,程序经常需要自动地发送电子邮件.如:一个网站的注册系统会在用户注册时发送一封邮件来确认注册:当用户忘记登陆密码的时候,通过邮件来取回密码.smtplib模块是python中smtp(简单邮件传输协议)的客户端实现.我们可以使用smtplib模块,轻松的发送电子邮件.下面的例子用了不到十行代码来发送电子邮件: #coding=gbk import smtplib smtp = smtplib.SMTP() smtp.connect("smtp.yeah.net", 

python 邮件发送

#!/usr/bin/env python # -*- coding:UTF-8 -*- #需要在邮箱处设置开启SMTP服务(第三方客户端发送) import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrdef mail(): ret = True try: msg = MIMEText('测试邮件','plain','utf-8') msg['From'] = formataddr([

python实现邮件发送完整代码(带附件发送方式)

实例一:利用SMTP与EMAIL实现邮件发送,带附件(完整代码) __author__ = 'Administrator'#coding=gb2312 from email.Header import Headerfrom email.MIMEText import MIMETextfrom email.MIMEMultipart import MIMEMultipartimport smtplib, datetime def SendMailAttach(): msg = MIMEMultip

SQL Server数据库邮件发送异常案例

最近遇到两起关于SQL Server数据库邮件发送异常的案例,这些问题也有点意思,顺便记录一下.方便以后遇到类似问题的人为这些问题抓狂!多提供一点思路. 案例1:我们一台数据库服务器突然发送邮件都不行了,出现问题时,检查邮件发送记录,你会发现发送状态都是failed. SELECT * FROM msdb.dbo.sysmail_faileditems   SELECT * FROM msdb.dbo.sysmail_mailitems 检查Database Mail Log,你会发现有下面一些

使用数据库邮件发送会议邀请

http://social.microsoft.com/Forums/it-IT/3ba417d6-6548-48ed-9e9f-1a6549edc569 大家好,在此提供一个示例展示如何使用数据库邮件发送会议邀请.创建CLR 存储过程,用来生成.ics文件:1. 在 Visual Studio中,创建一个Visual C# SQL CLR Database Project,请看: 2. 添加一个数据库引用,请看: 3. 创建一个CLR存储过程,命名为CLROutLook,请看: 4. 使用Sy