日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2023/12/9 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 提取数据库(Postgresql)并邮件发送 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

剛?cè)腴T(mén)python,發(fā)現(xiàn)確實(shí)是一個(gè)不錯(cuò)的語(yǔ)言。


業(yè)務(wù)部門(mén)要求將將某一個(gè)數(shù)據(jù)庫(kù)中的表,定期發(fā)送到相關(guān)部門(mén)人員郵箱。


其實(shí)整個(gè)業(yè)務(wù)需求很簡(jiǎn)單,實(shí)現(xiàn)起來(lái)也不難。

但是由于剛?cè)腴T(mén)python,所以還是借鑒了不上網(wǎng)上的內(nèi)容,也得到了許多群友的提醒。


業(yè)務(wù)部門(mén)使用的是Postgresql數(shù)據(jù)庫(kù),所以使用 了psyconpg2的模塊。

整個(gè)腳本分為三部分:

1.數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)寫(xiě)入excel表中(整個(gè)對(duì)新手來(lái)說(shuō),應(yīng)該是難點(diǎn))

2.郵件的發(fā)送

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

?

# 連接數(shù)據(jù)庫(kù)的參數(shù):主機(jī),用戶,密碼,端口及數(shù)據(jù)庫(kù)名稱

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"? # 路徑文件名使用日期時(shí)間來(lái)命名,但是文件命名不支持冒號(hào):所以去掉冒號(hào)

cur_path = 'd:/test'

?

print(out_path)

sql = 'select * from website;'

?

?

def export():

??? # 數(shù)據(jù)庫(kù)連接

??? 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??? # 數(shù)據(jù)表的標(biāo)題

??? workbook = xlwt.Workbook(encoding='utf-8')????????? # 創(chuàng)建excel文檔

??? sheet = workbook.add_sheet(sheet_name, cell_overwrite_ok=True)? # 根據(jù)sheet_name 創(chuàng)建excel文檔的sheet

?? ?for field in range(1, len(fields)):????? # 寫(xiě)入數(shù)據(jù)表的文件頭

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

?

??? # 逐行逐列的添加數(shù)據(jù)

??? 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就是多個(gè)部分

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 附件是每日統(tǒng)計(jì)情況,請(qǐng)查收!

??? 總計(jì)結(jié)果數(shù)位:''' + 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郵件服務(wù)器

??????? 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放入不同的文件夾,所以寫(xiě)了遍歷刪除所有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)

?

?? ?# 調(diào)用函數(shù)

if __name__ == "__main__":

??????? export()

??????? send_email()

??????? delete(cur_path)

?

?


轉(zhuǎn)載于:https://blog.51cto.com/c1813/2152514

總結(jié)

以上是生活随笔為你收集整理的Python 提取数据库(Postgresql)并邮件发送的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。