主要是公司運營需求就是查詢相關資料的情況給他們定時傳送,由於研發團隊沒有開發相關的功能,只要由我們運維組的來寫指令碼給他們匯出資料併傳送給他們。
1、這裡我只是把Oracle替換成了Mysql,如果需要Oracle相關的庫,請自行百度。
2、xlwt主要是為了將查詢的結果放入excle中。
3、傳送郵件選擇的ssl,465(阿里雲把25埠給封了好像)
4、指令碼的實現邏輯很簡單,文中主要的東西已經替換,我麼有統一寫在前面,最主要是別人要的急就沒注意規範,需要費一下眼神看一下。。。
import datetime
import xlwt
import pymysql
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
def sql():
table = '資料庫的表' # 我這裡就是簡單的查一張表
# 開啟資料庫連線
db = pymysql.connect("伺服器ip", "資料庫使用者", "資料庫密碼", "資料庫名")
# 使用 cursor() 方法建立一個遊標物件 cursor
cursor = db.cursor()
# 使用 execute() 方法執行 SQL 查詢
cursor.execute("SELECT * FROM {table};".format(table=table))
# 使用 fetchone() 方法獲取單條資料.
data = cursor.fetchall()
# 關閉資料庫連線
db.close()
return data, table
def writ_to_excel(data, database):
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet(database, cell_overwrite_ok=True)
# i為索引,j為內容
for i, j in enumerate(data):
# m為j裡面內容的索引,n為j裡單獨的每個內容
for m, n in enumerate(j):
sheet.write(i, m, n)
url = r'C:\Users\cj\Desktop\{}.xls'.format(database)
book.save(url)
return url
def send_eamil(url, table):
# 第三方 SMTP 服務
mail_host = "smtp.qq.com" # 設定伺服器
mail_user = "123456789@qq.com" # 使用者名稱
mail_pass = "45678jkjlsfds" # 口令
# 接收郵件,可設定為你的QQ郵箱或者其他郵箱
receivers = ['dfadsafdsaf@qq.com']
content = MIMEText(table) # 郵件內容
message = MIMEMultipart()
message.attach(content)
# message['From'] = Header("MySql查詢結果-附件", 'utf-8')
# message['To'] = Header(receivers, 'utf-8')
subject = "MySql查詢結果-附件-" + table + str(datetime.datetime.now())
message['Subject'] = Header(subject, 'utf-8')
xlsx = MIMEApplication(open(url, 'rb').read())
xlsx["Content-Type"] = 'application/octet-stream'
xlsx.add_header('Content-Disposition', 'attachment', filename=url.split('\\')[-1])
message.attach(xlsx)
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
# smtpObj.connect(mail_host, 25) # 25 為 SMTP 埠號
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(mail_user, receivers, message.as_string())
print("郵件傳送成功")
except Exception as e:
print(e)
if __name__ == '__main__':
data, table = sql()
url = writ_to_excel(data, table)
send_eamil(url, table)
複製程式碼