前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现Python连接数据库取数需求

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

作者头像
阿黎逸阳
发布2021-12-30 16:09:53
7880
发布2021-12-30 16:09:53
举报
文章被收录于专栏:阿黎逸阳的代码

最近公司有用Python连接数据库跑数,并自动定时发送邮件报表的需求,所以我们最近在这一块花了一些时间实现。

自动发送邮件可参考之前的文章【干货】用Python每天定时发送监控邮件,本文和大家分享如何应用Python自动连接数据库跑数。

本文目录

  1. 效果展示
  2. 代码详解 2.1 导入库 2.2 连接数据库 2.3 执行sql 2.4 处理数据

一、效果展示

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

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

二、代码详解

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

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

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

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

1 导入库

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

代码语言:javascript
复制
import datetime
import pymysql
import numpy as py
import pandas as pd

其中datetime是时间处理包,pymysql是连接数据库的包,numpy和pandas是数据处理包。

2 连接数据库

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

代码语言:javascript
复制
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语句,得到数据结果。

代码语言:javascript
复制
#版本一:直接在程序中写sql
sql_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脚本并读取sql
cursor.execute(sql_recent_5d_sx)                                         #执行sql语句
sql_result = cursor.fetchall()                                           #取出操作返回的所有的行

本文介绍了两个执行sql的版本,当你的sql语句不是很长的时候,可以使用版本一,直接在程序中写sql。

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

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

4 处理数据

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

代码语言:javascript
复制
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_yx
for i in data_recent_5d_yx.columns:
    data_list_2.remove(i)
for i in data_list_2:
    data_recent_5d_yx[i] = 0
data_recent_5d_yx_f = data_recent_5d_yx[data_list_0]  #最终结果

这一步的处理方式因需要而改变,大家可以自行处理。

至此,用Python实现连接数据库取数需求已分享完毕,有需要的小伙伴可以根据本文代码自行实现。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档