下面的代码能实现基本的功能。有一些参数需要改成自己的,比如数据库连接参数和邮箱相关的参数。

#定时相关

import datetime

import schedule #定时器

import threading#多线程

#数据库相关

import time

import csv

import codecs

import pymysql#mysql

#邮件相关

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import smtplib

import os,sys

Last_backup_date=datetime.datetime.now()+datetime.timedelta(days=-1);#最后备份日期(初始值为当前时间减去1天)

#time_array=[13,20]#每天的备份时间(24小时制,例:下午1点30分备份【time_array=[13,30]】)

backups=True#可以备份

tim=100#循环的时间

sql='select * from ?'

mail_from='**********@qq.com' #发送方邮箱

mail_pass='**********' #填入发送方邮箱的授权码

to_list='**********@qq.com' #收件人邮箱

def sendmail_backups(mail_from,to_list,subject,content,filename):#发件人,收件人,主题,正文,附件

msg = MIMEMultipart('related') ##采用related定义内嵌资源的邮件体

msgtext = MIMEText(content,_subtype='plain',_charset='utf-8') ##_subtype有plain,html等格式,避免使用错误

msg.attach(msgtext)

attach = MIMEText(open(filename,'rb').read(), 'base64', 'utf-8')

attach["Content-Type"] = 'application/octet-stream'

attach.add_header("Content-Disposition", "attachment", filename=("gbk", "", filename))

msg.attach(attach)

msg['Subject'] = subject

msg['From'] = mail_from

msg['To'] = to_list

return msg

def sendMail(msg):

try:

server = smtplib.SMTP_SSL("smtp.qq.com",465)

print ('连接邮箱服务器成功')

server.login(mail_from, mail_pass)

print ('登陆成功')

print ('发送邮件中')

server.sendmail(mail_from, msg['To'], msg.as_string())

server.quit() ##断开smtp连接

print ("邮件发送成功")

except Exception.e:

print ("失败"+str(e))

def get_conn():

conn = pymysql.connect(host='数据库主机',port=端口,user='用户名',password='密码',db='数据库',charset='utf8')

return conn

def query_all(cur,sql,args):#执行sql

cur.execute(sql,args)

return cur.fetchall()

def read_mysql_to_csv(filename):#获取备份CSV文件

print(filename)

with codecs.open(filename=filename,mode='w',encoding='utf-8') as f:

write=csv.writer(f,dialect='excel')

conn=get_conn()

cur=conn.cursor()

results=query_all(cur = cur, sql=sql, args=None)

for result in results:

#print(result)

write.writerow(result)

msg=sendmail_backups(mail_from,to_list,str(datetime.datetime.now().date())+'【备份邮件】','这是'+sql+'语句的数据库备份文件',filename)

sendMail(msg)

def job():#备份任务

global backups

global Last_backup_date

backups=False#锁定备份

sname=str(datetime.datetime.now().date())+'.csv'

read_mysql_to_csv(sname)

print(str(datetime.datetime.now())+' '+sname+' 备份成功!')

Last_backup_date=datetime.datetime.now()

backups=True#解锁备份

def job_task():

if Last_backup_date.date()!=datetime.datetime.now().date():#最后备份日期不是今天

if backups:

threading.Thread(target=job).start()

else:

print('正在执行备份,备份任务锁定中!')

else:

print('今天已备份,无需再次备份!')

def run():

job_task()

schedule.every(tim).seconds.do(job_task)

while True:

schedule.run_pending()

if __name__ == '__main__':

print('程序运行时间:'+str(datetime.datetime.now()))

run()

效果图

更新:刚刚发现上面写的有问题,会大量占用cpu资源,导致系统卡顿。修改成下面的,上面的代码我也就不删了,供其它人参考。

def run():

while True:

job_task()

time.sleep(tim)

python定时导出已发送文件_python定时发送数据库备份文件到邮箱相关推荐

  1. 怎么将导出的sql文件再次导入到数据库?

    怎么将导出的sql文件再次导入到数据库? 数据库用起来很方便,可是更换电脑的时候海量数据怎么带走也是个麻烦,导出为sql文件增强了数据的可移植性.sql文件导出后怎么导入数据库呢?本文以Navicat ...

  2. python发送文件_python:socket传输大文件

    文件可以传输,但是对比传输前后的文件:socket_test.txt,末尾有一些不一致 服务端代码: #!/usr/bin/python # -*- coding: utf-8 -*- import ...

  3. python发送文件_Python发送邮件(最全)

    简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件. Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听 ...

  4. python 抓包 上传 文件_Python接口测试文件上传实例解析

    接口测试中,上传文件的测试场景非常常见.例如:上传头像(图片).上传文件.上传视频等.下面以一个上传图片的例子为大家讲解如何通过 python 测试上传文件接口. 首先通过抓包分析上传文件接口的请求参 ...

  5. python调用接口上传文件_python接口自动化7-post文件上传

    前言 文件上传在我们软件是不可少的,最多的使用是体现在我们后台,当然我们前台也会有.但是了解过怎样上传文件吗?这篇我们以禅道文档-创建文档,上传文件为例. post请求中的:Content-Type: ...

  6. python将字符串写入txt文件_python将字符串以utf-8格式保存在txt文件中的方法

    python将字符串以utf-8格式保存在txt文件中的方法 如下所示: #ltp_data 字符串 写进777.txt 1. def save(filename, contents): fh = o ...

  7. python保存数据到本地文件_python保存数据到本地文件的方法

    python保存数据到本地文件的方法 1.保存列表为.txt文件 #1/list写入txt ipTable = ['158.59.194.213', '18.9.14.13', '58.59.14.2 ...

  8. python能封装成exe文件_python文件封装成*.exe文件(单文件和多文件)

    环境:win10 64位  python3.7 单*.py文件打包 Python GUI:程序打包为exe 一.安装Pyinstaller,命令pip install Pyinstaller,(大写的 ...

  9. python 边读边写文件_Python 文件读写

    Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件 ...

  10. python编写请求参数带文件_python requests 库请求带有文件参数的接口实例

    有些接口参数是一个文件格式,比如fiddler 抓包参数如下显示 这个接口的 form-data fiddler 显示的和不带文件参数的接口有明显区别,显示的不是简单的键值对,所以我们也不能只通过 d ...

最新文章

  1. c++ int转unsigned int_mysql中int、bigint、smallint 和 tinyint的区别详细介绍
  2. 此三层非彼三层——MVCamp;UBD
  3. HDU1016(DFS)
  4. css3 pointer-events:none 允许点击穿透
  5. 谷歌街景新功能——帮警方抓毒贩
  6. 使用 Tye 辅助开发 k8s 应用竟如此简单(三)
  7. 计算机应用基础教学改革参考文献,关于计算机应用基础论文范文资料 与计算机应用基础课程教学改革分析有关论文参考文献...
  8. 安卓采集摄像头画面生成MP4文件
  9. Android什么时候用抽象类什么时候用接口
  10. 重新签名IOS .ipa文件 (包含第三方框架和插件)
  11. 关于软件工程的目的与意义
  12. 【新书推荐】杰夫·惠勒:帝泉传奇系列(共3册)
  13. 一信通短信接口对接_短信接口对接流程
  14. 二、RPA机器人开发基础
  15. AP 产品成本计算与传统成本计算
  16. 学习python需要多长时间?你知道吗?
  17. 基于Python(Tkinter)实现(图形界面)小说阅读器【100010450】
  18. UA OPTI544 量子光学4 补充:Parity Operator
  19. java使用数组实现Map集合
  20. 字符串最大跨距(c++)

热门文章

  1. JProfiler分析内存泄漏
  2. H3C交换机配件RS232配置线(DB9针转RJ45)
  3. find命令结合exec和xargs使用的区别
  4. PCIE的DMA和PIO介绍
  5. MYSQL异常处理日志:主从库同步延迟时间过长的分析
  6. 解决 Error:No suitable device found: no device found for connection System eth0
  7. 在linux上使用scp命令拷贝一个目录到另一台服务器的时候报not a regular file错误的解决办法...
  8. poj 3666 河南省第七届程序设计D题(山区修路)
  9. 企业级的Java快速开发平台,首选iMatrix平台。
  10. Android APK 签名问题