首先得安装各种库。。。。


诸如mysql,pandas,numpy之类的了

我使用的pandas版本为pandas (0.16.2)

其中openpyxls版本为openpyxl (1.8.6)


    其实到处mysql查询结果导出当然可以使用诸如sqllog,Navicat之类的客户端直接导出,简单快捷,下面的代码只是在需要定时并且以某种格式定期发送sql查询结果的环境下才存在的。

    注:再者pandas当然还可以结合matplotlib生成漂亮的饼状图或者柱状图,只不过笔者暂时没有这个需求,所以没有写生成图片的部分


放代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import  pandas
import  pandas as pd
import  MySQLdb
import  MySQLdb.cursors
import  os
import  datetime
from  email.mime.text  import  MIMEText
from  email.mime.multipart  import  MIMEMultipart
import  smtplib
 
 
#返回SQL结果的函数
def  retsql(sql):
     db_user  =  MySQLdb.connect( 'IP' , '用户名' , '密码' , 'j数据库名(可以不指定)' ,cursorclass = MySQLdb.cursors.DictCursor(设置返回结果以字典的格式))
     cursor  =  db_user.cursor()
     cursor.execute( "SET NAMES utf8;" (设置字符集为utf - 8 ,不然在返回的结果中会显示乱码,即使数据库的编码设置就是utf - 8 )) 
     cursor.execute(sql)
     ret  =  cursor.fetchall()
     db_user.close()
 
     return  ret
 
#生成xls文件的函数
def  retxls(ret,dt):
     file_name  =  datetime.datetime.now().strftime( "/path/to/store/%Y-%m-%d-%H:%M" +  dt  +  ".sql.xlsx"
     dret  =  pd.DataFrame.from_records(ret)
     dret.to_excel(filename, "Sheet1" ,engine = "openpyxl" ###z注意openpyxl这个库可能在生成xls的时候出错,pip install openpyxls==1.8.6,其他版本似乎与pandas有点冲突,安装1.8.6的即可
 
     print  "Ok!!! the file in" ,file_name
     return  filename
 
#发送邮件的函数
##传入主题,显示名,目标邮箱,附件名
def  sendm(sub,cttstr,to_list, file ):
     msg  =  MIMEMultipart()
     att  =  MIMEText( open ( file , 'rb' ).read(), "base64" , "utf-8" )
     att[ "Content-Type" =  "application/octet-stream"
     att[ "Content-Disposition" =  'attachment; filename="sql查询结果.xlsx"'
 
     msg[ 'from' =  '发件人地址'
     msg[ 'subject' =  sub
     ctt  =  MIMEText(cttstr, 'plain' , 'utf-8' )
 
     msg.attach(att)
     msg.attach(ctt)
     try :
         server  =  smtplib.SMTP()
         #server.set_debuglevel(1)  ###如果问题可打开此选项以便调试
         server.connect( "mail.example.com" , '25' )
         server.starttls()    ###如果开启了ssl或者tls加密,开启加密
         server.login( "可用邮箱用户名" , "密码" )
         server.sendmail(msg[ 'from' ],to_list,msg.as_string())
         server.quit()
         print  'ok!!!'
     except  Exception,e:
         print  str (e)
 
 
###想要查询的sql语句
sql = """sql语句"""
 
 
 
#接收邮件的用户列表
to_list  =  [ 'test1@example.com' ,
  'test2@example.com' ]
 
 
 
#执行sql并将结果传递给ret
ret  =  retsql(sql)
 
#将结果文件路径结果传给retfile
retfile  =  retxls(ret, "1" )
 
 
#发送邮件
#发送sql语句内容
sendm(sub1,sub1,to_list,retfile1)

    虽然上述代码还有很大的改动空间,但是能用并且已经用了,又不是很重要的部分,就不继续改进了。