python3 mysql导出到csv并发送邮件

<p>
</p><p>第一步:安装包</p><blockquote><p>pip install configparser</p></blockquote><p>
</p><p>第二步:编码</p><blockquote><p>#coding:utf-8</p><p>'''</p><p>Created on 2019年2月28日</p><p> </p><p>@author: nalnait</p><p>'''</p><p>import configparser</p><p>import os</p><p>import smtplib</p><p>from email.mime.text import MIMEText</p><p>from email.mime.multipart import MIMEMultipart</p><p>from email.header import Header</p><p>import MySQLdb</p><p>import csv</p><p>import codecs</p><p>import datetime</p><p> </p><p># import sys</p><p># reload(sys)</p><p>
</p><p>#python3写法:</p><p>import importlib,sys </p><p>importlib.reload(sys)</p><p>
</p><p># sys.setdefaultencoding('utf8')</p><p> </p><p>datenow = datetime.datetime.now().strftime("%Y%m%d")</p><p> </p><p>def read_mysql_to_csv(srcDbConn, fileName):</p><p>    with codecs.open(filename=fileName, mode='w', encoding='GB2312') as f: #encoding='GB2312' 保证写入csv的中文不是乱码</p><p>        write = csv.writer(f, dialect='excel')</p><p>        srcCursor = srcDbConn.cursor()</p><p>#        sql = "select id,pid,name,enname,pwd,role from users WHERE ymd = {0} ".format(datenow)</p><p>        sql = "select id,pid,name,enname,pwd,role from users " </p><p>        count = srcCursor.execute(sql)</p><p>        print (count)</p><p>        data = srcCursor.fetchall()</p><p>        id = 'ID'</p><p>        pid = '父ID'</p><p>        name = '姓名'</p><p>        enname = '英文名字'</p><p>        pwd = '密码'</p><p>        role = '角色'</p><p>        title = (id,pid,name,enname,pwd,role)</p><p>        write.writerow(title)</p><p>        for row in data:</p><p>            print (row)</p><p>            write.writerow(row)         </p><p> </p><p>def send_mail(fileName):</p><p>    #读取配置文件</p><p>    #config = ConfigParser.SafeConfigParser()</p><p>    config = configparser.ConfigParser()</p><p>    batRunningPath = os.path.dirname(os.sys.executable)</p><p>    batPath = os.path.dirname(os.sys.path[0])</p><p>    if os.path.exists(batPath + "\py_20200227\config.ini"): #配置文件config.ini的路径</p><p>        config.read(batPath + "\py_20200227\config.ini")</p><p>    else:</p><p>        config.read(batRunningPath + "\config.ini")</p><p>                 </p><p>    mail_host    = config.get("email", "mail_host")</p><p>    receveAddr   = config.get("email", "mail_to_list")</p><p>    ccAddr       = config.get("email", "mail_cc_list")</p><p>     </p><p>    mail_to_list = receveAddr.split(",") #收件人</p><p>    mail_cc_list = ccAddr.split(",")     #抄送</p><p>     </p><p>    mail_user    = config.get("email", "mail_user") #发件人</p><p>    mail_pass    = config.get("email", "mail_pass") #发件人密码</p><p>     </p><p>    mail_sub = "附件测试"  #邮件标题</p><p>    mail_content = ""    #正文内容</p><p>     </p><p>    #创建一个带附件的实例</p><p>    msg = MIMEMultipart()</p><p>     </p><p>    #构造附件1,传送当前目录下 test.txt 文件</p><p>    att1 = MIMEText(open(fileName, 'rb').read(), 'base64', 'utf-8')</p><p>    att1["Content-Type"] = 'application/octet-stream'</p><p>    att1["Content-Disposition"] = 'attachment; filename="{0}"'.format(fileName)</p><p>    msg.attach(att1)</p><p>     </p><p>    #邮件正文内容</p><p>    msg.attach(MIMEText(mail_content,'plain', 'utf-8'))</p><p>     </p><p>    msg['Subject'] = Header(mail_sub, 'utf-8')</p><p>    msg['From'] = mail_user</p><p>    msg['To'] = ",".join(mail_to_list)</p><p>    msg['Cc'] = ",".join(mail_cc_list)</p><p>    receive = mail_to_list</p><p>    receive.extend(mail_cc_list)</p><p>    try:</p><p>        server = smtplib.SMTP_SSL(mail_host)</p><p>        server.login(mail_user,mail_pass)</p><p>        server.sendmail(mail_user,receive,msg.as_string())</p><p>        server.close()</p><p>    except Exception as e:</p><p>        print (str(e)  ) </p><p> </p><p> </p><p>if name == 'main':</p><p>     </p><p>    charset = "utf8"</p><p>    #源数据库</p><p>    db = MySQLdb.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='oldboy', charset='utf8')</p><p>    fileName = "USERS_{0}.csv".format(datenow)</p><p>     </p><p>    read_mysql_to_csv(db, fileName)</p><p>    send_mail(fileName)</p><p>
</p><p>#coding:utf-8</p><p>'''</p><p>Created on 2019年2月28日</p><p> </p><p>@author: nalnait</p><p>'''</p><p>import configparser</p><p>import os</p><p>import smtplib</p><p>from email.mime.text import MIMEText</p><p>from email.mime.multipart import MIMEMultipart</p><p>from email.header import Header</p><p>import MySQLdb</p><p>import csv</p><p>import codecs</p><p>import datetime</p><p> </p><p># import sys</p><p># reload(sys)</p><p>
</p><p>#python3写法:</p><p>import importlib,sys </p><p>importlib.reload(sys)</p><p>
</p><p># sys.setdefaultencoding('utf8')</p><p> </p><p>datenow = datetime.datetime.now().strftime("%Y%m%d")</p><p> </p><p>def read_mysql_to_csv(srcDbConn, fileName):</p><p>    with codecs.open(filename=fileName, mode='w', encoding='GB2312') as f: #encoding='GB2312' 保证写入csv的中文不是乱码</p><p>        write = csv.writer(f, dialect='excel')</p><p>        srcCursor = srcDbConn.cursor()</p><p>        sql = "select id,pid,name,enname,pwd,role from users " </p><p>        count = srcCursor.execute(sql)</p><p>        print (count)</p><p>        data = srcCursor.fetchall()</p><p>        id = 'ID'</p><p>        pid = '父ID'</p><p>        name = '姓名'</p><p>        enname = '英文名字'</p><p>        pwd = '密码'</p><p>        role = '角色'</p><p>        title = (id,pid,name,enname,pwd,role)</p><p>        write.writerow(title)</p><p>        for row in data:</p><p>            print (row)</p><p>            write.writerow(row)         </p><p> </p><p>def send_mail(fileName):</p><p>    #读取配置文件</p><p>    #config = ConfigParser.SafeConfigParser()</p><p>    config = configparser.ConfigParser()</p><p>    batRunningPath = os.path.dirname(os.sys.executable)</p><p>    batPath = os.path.dirname(os.sys.path[0])</p><p>    if os.path.exists(batPath + "\py_20200227\config.ini"): #配置文件config.ini的路径</p><p>        config.read(batPath + "\py_20200227\config.ini")</p><p>    else:</p><p>        config.read(batRunningPath + "\config.ini")</p><p>                 </p><p>    mail_host    = config.get("email", "mail_host")</p><p>    receveAddr   = config.get("email", "mail_to_list")</p><p>    ccAddr       = config.get("email", "mail_cc_list")</p><p>     </p><p>    mail_to_list = receveAddr.split(",") #收件人</p><p>    mail_cc_list = ccAddr.split(",")     #抄送</p><p>     </p><p>    mail_user    = config.get("email", "mail_user") #发件人</p><p>    mail_pass    = config.get("email", "mail_pass") #发件人密码</p><p>     </p><p>    mail_sub = "附件测试"  #邮件标题</p><p>    mail_content = ""    #正文内容</p><p>     </p><p>    #创建一个带附件的实例</p><p>    msg = MIMEMultipart()</p><p>     </p><p>    #构造附件1,传送当前目录下 test.txt 文件</p><p>    att1 = MIMEText(open(fileName, 'rb').read(), 'base64', 'utf-8')</p><p>    att1["Content-Type"] = 'application/octet-stream'</p><p>    att1["Content-Disposition"] = 'attachment; filename="{0}"'.format(fileName)</p><p>    msg.attach(att1)</p><p>     </p><p>    #邮件正文内容</p><p>    msg.attach(MIMEText(mail_content,'plain', 'utf-8'))</p><p>     </p><p>    msg['Subject'] = Header(mail_sub, 'utf-8')</p><p>    msg['From'] = mail_user</p><p>    msg['To'] = ",".join(mail_to_list)</p><p>    msg['Cc'] = ",".join(mail_cc_list)</p><p>    receive = mail_to_list</p><p>    receive.extend(mail_cc_list)</p><p>    try:</p><p>        server = smtplib.SMTP_SSL(mail_host)</p><p>        server.login(mail_user,mail_pass)</p><p>        server.sendmail(mail_user,receive,msg.as_string())</p><p>        server.close()</p><p>    except Exception as e:</p><p>        print (str(e)  ) </p><p> </p><p> </p><p>if name == 'main':</p><p>     </p><p>    charset = "utf8"</p><p>    #源数据库</p><p>    db = MySQLdb.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='oldboy', charset='utf8')</p><p>    fileName = "USERS_{0}.csv".format(datenow)</p><p>     </p><p>    read_mysql_to_csv(db, fileName)</p><p>    send_mail(fileName)</p><p>

</p><p>
</p></blockquote><p>
</p><p>INI文件:</p><blockquote><p>[email]</p><p>#smtp address</p><p>mail_host=smtp.163.com:465</p><p>
</p><p>#accept mail</p><p>mail_to_list=email_addrX1@163.com</p><p>mail_cc_list=email_addrX2@163.com</p><p>
</p><p>#send mail</p><p>mail_user=email_addrX3@163.com</p><p>mail_pass=password</p><p>
</p></blockquote><p>第三步,跳过的坑:</p><blockquote><p>import configparser</p><p>config = configparser.ConfigParser()</p><p>python2与python3不同</p></blockquote><blockquote><p>#python2 </p><p># import sys</p><p># reload(sys)</p><p>
</p><p>#python3写法:</p><p>import importlib,sys </p><p>importlib.reload(sys)</p><p>
</p></blockquote><blockquote><p># sys.setdefaultencoding('utf8')</p><p>python2需要,python3就不需要了</p></blockquote><blockquote><p>python2</p><p>except Exception, ex:</p><p>python3</p><p>except Exception as ex:</p><p>
</p></blockquote><p>
</p><p>参考文件:</p><p><a>https://blog.csdn.net/JENREY/article/details/86238541</a></p><p><a>https://www.cnblogs.com/SZxiaochun/p/10396365.html</a></p><p>
</p><p>
</p><p>
</p><p>
</p><p>
</p><p>
</p><p>
</p><p>
</p><p>
</p><p>
</p><p>
</p>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容