Python 每日定时查询数据库生成Excel报表,并群发邮件
最近在做游戲打點數據的一些統計處理,寫了個Python腳本完成每日定時自動查詢生成Excel報表并群發郵件的小功能。
拆解幾個需求點:
一.連接數據庫并查詢
以下是一個查詢總注冊人數的示例代碼,host port db user password等填入自己數據庫的參數。
mysql就不多說了,根據統計需求自己擼吧
import pymysqlhost = 'xxxx' port = xxx db = 'xxx' user = 'xxx' password = 'xxx'# ---- 用pymysql 操作數據庫 def get_connection():conn = pymysql.connect(host=host, port=port, db=db, user=user, password=password)return connconn = get_connection()# 使用 cursor() 方法創建一個 dict 格式的游標對象 cursor cursor = conn.cursor(pymysql.cursors.DictCursor)#總注冊 cursor.execute("select count(distinct userId) as total from Statistics where ops = 'register' ") data = cursor.fetchone() allTotalRegisterNum = data['total'] print("-- 總注冊人數: %s " % (data['total']))二.查詢的數據生成Excel報表
以下為統計關卡數據并生成Excel的小例子,startPersonNum,finishPersonNum,ratio都是之前查庫處理好的數據,生成的Excel名稱為 地區+數據統計+日期,region為統計的地區,yesterday為昨天日期
import xlwt workbook = xlwt.Workbook(encoding = 'ascii') worksheet = workbook.add_sheet('關卡數據')#關卡統計數據 print("-- 開始關卡數據統計 -- ") worksheet.col(1).width = 3000 worksheet.col(2).width = 3000 worksheet.col(3).width = 3000 worksheet.write(0, 1, "開始關卡人數") worksheet.write(0, 2, "結束關卡人數") worksheet.write(0, 3, "單關完成率") worksheet.write(i, 1, startPersonNum) worksheet.write(i, 2, finishPersonNum) worksheet.write(i, 3, ratio) workbook.save("%s_數據統計_%s.xls" % (region, str(yesterday))) # 保存文件三.發送郵件
sender 發送發,receivers 接收方數組,? ? ? ? ?mail_host 郵件服務器,mail_user="xxx" ? ?#用戶名
?mail_pass="xxx" ? #口令?
四.定時功能
以下為每日1點啟動發送郵件函數的例子
from apscheduler.schedulers.blocking import BlockingSchedulerdef job():SendEmail()def start():# BlockingSchedulerscheduler = BlockingScheduler()scheduler.add_job(job, 'cron', day_of_week='0-6', hour=1, minute=00)scheduler.start()if __name__ == '__main__':start()五.幾個坑
1.數據庫連接超時。
代碼如果運行在國內本機,連接海外服務器數據庫的話是很容易超時的,可以將代碼布置到服務器上或者掛VP
2.發送郵件代碼中的Password
不是郵箱的密碼,是郵箱的授權碼,是郵箱的授權碼,是郵箱的授權碼。重要的事情說三遍。授權碼去自己的發送方郵箱里設置獲取
3.郵件附件的命名
命名不能有亂七八糟的字符,否則會發現貼到郵件中是bin文件
完整示例代碼git地址: git@github.com:Dejavu0709/Statistics.git
發送郵件常見問題參考鏈接:Python發送郵件smtplib.SMTP各報錯問題的解決方法_DearMorning的博客-CSDN博客
總結
以上是生活随笔為你收集整理的Python 每日定时查询数据库生成Excel报表,并群发邮件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode695. 岛屿的最大面积
- 下一篇: 守望先锋英雄半藏操作、属性心得 半藏打法