实现Python连接数据库取数需求

最近公司有用Python连接数据库跑数,并自动定时发送邮件报表的需求,所以我们最近在这一块花了一些时间实现。
自动发送邮件可参考之前的文章【干货】用Python每天定时发送监控邮件,本文和大家分享如何应用Python自动连接数据库跑数。
本文目录
  1. 效果展示

  2. 代码详解

    2.1 导入库

    2.2 连接数据库

    2.3 执行sql

    2.4 处理数据


一、效果展示

在正式进入代码讲解之前,先来看下自动定时发送邮件的实现效果。

由于部分数据涉及到公司信息,出于职业道德做了数值处理和打码,请见谅。


二、代码详解

本小节会详细阐述如何应用python实现连接数据库跑数。主要思路是:

step1:连接数据库,创建游标。

step2:确定跑数脚本,执行跑数代码。

step3:对得到的执行结果进行数据处理。


 1   导入库

首先导入本文需要加载的库,如果你有些库还没有安装,导致运行代码时报错,可以在Anaconda Prompt中用pip方法安装。

import datetimeimport pymysqlimport numpy as pyimport pandas as pd
其中datetime是时间处理包,pymysql是连接数据库的包,numpy和pandas是数据处理包。


 2   连接数据库

导入库后,执行如下连接数据库代码。

db = pymysql.connect(host='10.101.2.36',            #要连接的主机地址                           user='selxxx',           #用于登录的数据库用户                           password='selxxx@123',   #用户密码                           database='xxx_loan',     #要连接的数据库                           port=3306,               #连接的端口                           charset='',              #字符编码                           use_unicode=None,        #是否使用unicode编码                           connect_timeout=10000    #连接超时时间                    )   cursor = db.cursor()                                #创建一个游标
其中user、password、database对应的内容需要替换成你要连接的数据库信息。


 3   执行sql

接着,执行sql语句,得到数据结果。

#版本一:直接在程序中写sqlsql_recent_5d_sx = '''    select        appl_date,        count(                distinct                 case when u.appl_type=1                 then loan_appl_no                 else null                 end                ) as `申请量`,        count(                distinct                 case                 when u.appl_type=1                 and OUT_TEMPDECISION = 'PASS'                then loan_appl_no                 else null                 end                ) as `系统自动通过量`    from table'''                                #sql脚本cursor.execute(sql_recent_5d_sx)   #执行sql语句sql_result = cursor.fetchall()     #取出操作返回的所有的行
#版本二:把sql存到txt文档中sql_path_recent_5d_sx = r'C:\Users\xzy\recent_5day_sx.txt' #标记sql存储路径sql_recent_5d_sx = open(sql_path_recent_5d_sx, encoding='utf-8').read() #打开sql脚本并读取sqlcursor.execute(sql_recent_5d_sx) #执行sql语句sql_result = cursor.fetchall() #取出操作返回的所有的行
本文介绍了两个执行sql的版本,当你的sql语句不是很长的时候,可以使用版本一,直接在程序中写sql。

当sql语句较长时,建议使用版本二,会让python代码更清晰和整洁。

其中sql_result存储的就是执行sql语句后得到的全量数据。


 4   处理数据

最后,对得到的全量数据根据需求进行个性化处理。

data_recent_5d_yx = pd.DataFrame(sql_result)  #把sql结果转成数据框data_recent_5d_yx.columns = ['date',    '用信申请笔数','用信通过笔数','用信通过率','用信金额','白条支付占比','白条提现占比','白条外部用款占比','先息后本占比','等额本息占比']                                            #给数据框添加列名data_recent_5d_yx = data_recent_5d_yx.T      #把数据框转置一下data_recent_5d_yx.columns = data_recent_5d_yx.iloc[0] #给数据框添加行名data_recent_5d_yx = data_recent_5d_yx.iloc[1:]        #删除第一行#data_recent_5d_yxfor i in data_recent_5d_yx.columns:    data_list_2.remove(i)for i in data_list_2:    data_recent_5d_yx[i] = 0data_recent_5d_yx_f = data_recent_5d_yx[data_list_0]  #最终结果
这一步的处理方式因需要而改变,大家可以自行处理。
至此,用Python实现连接数据库取数需求已分享完毕,有需要的小伙伴可以根据本文代码自行实现。
往期回顾:

情人节表白烟花

520表白代码合集
黑客帝国中的代码雨
用python绘制皮卡丘
娱乐圈排行榜动态条形图绘制
Python人脸识别—我的眼里只有你
3D星空图V2版——添加背景图片和音乐


扫一扫关注我

13162366985

投稿微信号、手机号

请使用浏览器的分享功能分享到微信等