亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么生成每日報表數據并郵件發送

發布時間:2021-06-24 10:52:10 來源:億速云 閱讀:167 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關python怎么生成每日報表數據并郵件發送,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

定時發送直接使用了win服務器的定時任務來定時執行腳本

#coding:utf-8
from __future__ import division
import pymssql,sys,datetime,xlwt 
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
 
reload(sys)
sys.setdefaultencoding("utf-8")
 
 
class MSSQL:
  def __init__(self,host,user,pwd,db):
    self.host = host
    self.user = user
    self.pwd = pwd
    self.db = db
 
  def __GetConnect(self):
    if not self.db:
      raise(NameError,"")
    self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
    cur = self.conn.cursor()
    if not cur:
      raise(NameError,"")
    else:
      return cur
 
  def ExecQuery(self,sql):
    cur = self.__GetConnect()
    cur.execute(sql)
    resList = cur.fetchall()
 
    #
    self.conn.close()
    return resList
 
  def ExecNonQuery(self,sql):
    cur = self.__GetConnect()
    cur.execute(sql)
    self.conn.commit()
    self.conn.close()
    
  
  def write_data_to_excel(self,name,sql):
 
    # 將sql作為參數傳遞調用get_data并將結果賦值給result,(result為一個嵌套元組)
    result = self.ExecQuery(sql)
    # 實例化一個Workbook()對象(即excel文件)
    wbk = xlwt.Workbook()
    # 新建一個名為Sheet1的excel sheet。此處的cell_overwrite_ok =True是為了能對同一個單元格重復操作。
    sheet = wbk.add_sheet('Sheet1',cell_overwrite_ok=True)
    # 獲取當前日期,得到一個datetime對象如:(2016, 8, 9, 23, 12, 23, 424000)
    today = datetime.date.today()
    yesterday = today - datetime.timedelta(days=1)
    # 將獲取到的datetime對象僅取日期如:2016-8-9
    yesterdaytime = yesterday.strftime("%Y-%m-%d")
    # 遍歷result中的沒個元素。
    for i in xrange(len(result)):
      #對result的每個子元素作遍歷,
      for j in xrange(len(result[i])):
        #將每一行的每個元素按行號i,列號j,寫入到excel中。
        sheet.write(i,j,result[i][j])
    # 以傳遞的name+當前日期作為excel名稱保存。
    filename = name+str(yesterdaytime)+'.xls'
    wbk.save(filename) 
    return filename
 
 
 
ms = MSSQL(host="122.229.*.*",user="root",pwd="root",db="test")
 
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
yesterdayStart = yesterday.strftime("%Y-%m-%d") + ' 00:00:00'
yesterdayEnd = yesterday.strftime("%Y-%m-%d") + ' 23:59:59'
print yesterdayStart
preCheckCountSuccesSql = "select count(1) FROM tb_crmorders WHERE type =1 and result = 'true' and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
preCheckUseridSuccesSql = "select count(DISTINCT userid) FROM tb_crmorders WHERE type =1 and result = 'true' and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
preCheckCountErrorSql = "select count(1) FROM tb_crmorders WHERE type =1 and result = 'false' and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
preCheckUseridErrorSql = "select count(DISTINCT userid) FROM tb_crmorders WHERE type =1 and result = 'false' and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
 
orderSucessCountSql = "select count(1) FROM tb_crmorders WHERE type =2 and action =1 and result = 'true' and notifyresult = 0 and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
orderErrorCountSql = "select count(1) FROM tb_crmorders WHERE type =2 and action =1 and result = 'true' and notifyresult IS NOT NULL and notifyresult != 0 and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
unsubscribeSucessCountSql = "select count(1) FROM tb_crmorders WHERE type =2 and action =2 and result = 'true' and notifyresult = 0 and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
unsubscribeErrorCountSql = "select count(1) FROM tb_crmorders WHERE type =2 and action =2 and result = 'true' and notifyresult IS NOT NULL and notifyresult != 0 and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
 
orderKadanSql = "select count(1) FROM tb_crmorders WHERE type =2 and action =1 and result = 'true' and notifyresult IS NULL and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
unsubscribeKadanSql = "select count(1) FROM tb_crmorders WHERE type =2 and action =2 and result = 'true' and notifyresult IS NULL and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
preCherkKeyList =['CRM預校驗成功單子數量:','CRM預校驗成功賬號數量:','CRM預校驗失敗單子數量:','CRM預校驗失敗賬號數量:','訂購的訂單數 成功:','訂購的訂單數 失敗:','訂購卡單數:','退訂的訂單數 成功:','退訂的訂單數 失敗:','退訂卡單數:']
preCherkL = {'CRM預校驗成功單子數量:' :preCheckCountSuccesSql ,'CRM預校驗成功賬號數量:' :preCheckUseridSuccesSql ,'CRM預校驗失敗單子數量:' :preCheckCountErrorSql ,'CRM預校驗失敗賬號數量:' :preCheckUseridErrorSql}
preCherkL['訂購的訂單數 成功:'] = orderSucessCountSql
preCherkL['訂購的訂單數 失敗:'] = orderErrorCountSql
preCherkL['訂購卡單數:'] = orderKadanSql
preCherkL['退訂的訂單數 成功:'] = unsubscribeSucessCountSql
preCherkL['退訂的訂單數 失敗:'] = unsubscribeErrorCountSql
preCherkL['退訂卡單數:'] = unsubscribeKadanSql
 
mailMessageText =''
 
for key in preCherkKeyList:
  reslist = ms.ExecQuery(preCherkL[key])
  for i in reslist:
    for n in i:
      mailMessageText = mailMessageText + key + bytes(n) + '\n' 
 
 
crmOrderHandleTimeSql = "select addtime , notifytime FROM tb_crmorders WHERE type =2 and action =1 and result = 'true' and notifyresult =0 and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
crmunsubscribeHandleTimeSql = "select addtime , notifytime FROM tb_crmorders WHERE type =2 and action =2 and result = 'true' and notifyresult =0 and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'";
 
crmOrderHandle = ms.ExecQuery(crmOrderHandleTimeSql)
orderCount = len(crmOrderHandle)
if orderCount != 0:
  totleTime = 0
  for temp in crmOrderHandle:
    addtime = temp[0]
    notifytime = temp[1]
    
#     adddate = datetime.datetime.strptime(addtime,"%Y-%m-%d %H:%M:%S")
#     notifydate =datetime.datetime.strptime(notifytime, "%Y-%m-%d %H:%M:%S")
    chazhi = (notifytime - addtime).seconds / 60
    totleTime = float(totleTime) + float(chazhi)
  mailMessageText = mailMessageText + '訂購平均處理時長:' + bytes(float(totleTime)/orderCount) + '分' + '\n' 
 
crmunsubscribeHandle = ms.ExecQuery(crmunsubscribeHandleTimeSql)
subscribeCount = len(crmunsubscribeHandle)
if subscribeCount != 0:
  subscribetotleTime = 0
  for temp in crmunsubscribeHandle:
    addtime = temp[0]
    notifytime = temp[1]
#     adddate = datetime.datetime.strptime(addtime, "%Y-%m-%d %H:%M:%S")
#     notifydate = datetime.datetime.strptime(notifytime, "%Y-%m-%d %H:%M:%S")
    chazhi = (notifytime - addtime).seconds / 60
    subscribetotleTime = float(subscribetotleTime) + float(chazhi)
  mailMessageText = mailMessageText + '退訂平均處理時長:' + bytes(float(subscribetotleTime)/subscribeCount) + '分' + '\n' 
mailMessageText = mailMessageText + '附件為 :預校驗失敗訂單,訂購/退訂失敗訂單,卡單訂單' + '\n' 
 
print mailMessageText
 
#生成excel文件
 
preCheckErrorname = 'preCheckError'
preCerroeFile = ms.write_data_to_excel(preCheckErrorname, "select ordercode,userid,productid,action,msg FROM tb_crmorders WHERE type =1 and result = 'false' and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'")
 
orderErrorname = 'orderFalse'
ordererroeFile = ms.write_data_to_excel(orderErrorname, "select ordercode,userid,productid,action,sg,notifyresult,notifymsg FROM tb_crmorders WHERE type =2  and result = 'true' and notifyresult IS NOT NULL and notifyresult != 0 and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'")
 
kadanname = 'noSynchMsg'
kadanFile = ms.write_data_to_excel(kadanname, "select ordercode,userid,productid,sg,action FROM tb_crmorders WHERE type =2 and result = 'true' and notifyresult IS NULL and addtime BETWEEN '" + yesterdayStart +"' and '"+yesterdayEnd + "'")
# 第三方 SMTP 服務
mail_host="###@163.com" #設置服務器
mail_user=##"  #用戶名
mail_pass="##"  #口令 
 
 
sender = '###@163.com'
receivers = ['##@qq.com'] # 接收郵件,可設置為你的QQ郵箱或者其他郵箱
 
#創建一個帶附件的實例
message = MIMEMultipart()
 
message['From'] = Header("測試", 'utf-8')
message['To'] = Header(" , ".join(receivers), 'utf-8')
 
subject = 'CRM訂單日數據' + yesterday.strftime('%Y-%m-%d')
message['Subject'] = Header(subject, 'utf-8')
 
#郵件正文內容
message.attach(MIMEText(mailMessageText, 'plain', 'utf-8'))
#設置郵件名片(html格式)
# html = file('qianming.html').read().decode("utf-8")
# message.attach(MIMEText(html, 'html', 'utf-8'))
 
# 構造附件1,傳送當前目錄下的preCerroeFile 文件
att1 = MIMEText(open(preCerroeFile, 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字
att1["Content-Disposition"] = 'attachment; filename=' + preCerroeFile
message.attach(att1)
 
 
att2 = MIMEText(open(ordererroeFile, 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename='+ordererroeFile
message.attach(att2)
 
 
att3 = MIMEText(open(kadanFile, 'rb').read(), 'base64', 'utf-8')
att3["Content-Type"] = 'application/octet-stream'
att3["Content-Disposition"] = 'attachment; filename='+kadanFile
message.attach(att3)
 
try:
  smtpObj = smtplib.SMTP() 
  smtpObj.connect(mail_host, 25)  # 25 為 SMTP 端口號
  smtpObj.login(mail_user,mail_pass) 
  smtpObj.sendmail(sender, receivers, message.as_string())
  print "郵件發送成功"
except smtplib.SMTPException,e:
  print "Error: 無法發送郵件" + repr(e)

關于“python怎么生成每日報表數據并郵件發送”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红桥区| 徐水县| 历史| 四子王旗| 宿迁市| 青州市| 集贤县| 翁牛特旗| 海林市| 锦屏县| 晋江市| 永善县| 抚远县| 道孚县| 延庆县| 余江县| 武隆县| 八宿县| 葵青区| 达尔| 麻阳| 沙河市| 怀安县| 金平| 米林县| 新营市| 同心县| 喜德县| 工布江达县| 蓝山县| 哈尔滨市| 内丘县| 溆浦县| 肥西县| 台北市| 台山市| 武清区| 来安县| 白水县| 安新县| 汤阴县|