Python操作Mysql(连接、数据探查、写Excel)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Python操作Mysql(连接、数据探查、写Excel)

正文


一、缘起


事情是这样的,领导安排一个活,详细探查xx公司的数据治理,包括数据源,数据流,数据质量。


PS.工作量非常大,费劲整理出质量报告!


123.png


好的,没问题: 嘴上逞强,心在滴血!


二、转机


我一想,数据探查不就是看这些指标:


表名,列名,空值数量,总数据量,空值率,字符类型,字段长度,备注,主键,权限


既如此,何不用python?


于是乎,奋笔疾书!


三、成果


说干就干,最终用python 快速完成数据治理调研,而我,楼下遛弯去了~


但是,活可没马虎,给大家康康效果:

234.png

四、过程


为了让更多有数据处理需求的小伙伴,高效搞定工作,我觉得把相关代码完全开源,当然,也有提升的地方,希望小伙伴在评论区指指点点。

代码大致分为4个部分:


1、导包


#coding=utf-8
from __future__ import division
import os,openpyxl,pymysql as MySQL


2.连接数据库


print("开始连接ing")
try:
    conn=MySQL.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="tomato",charset='utf8')
    #charset解决字符乱码
except:
    print("连接失败!")
cur = conn.cursor()
print("连接成功!!!")


3、数据探查


#tab=['xxxxxx','bbbbbb']  #指定探索的表名
tab=[]
if len(tab)==0 :
    quary="""show tables; """
    ret=cur.execute(quary)
    ret=cur.fetchall()  #结果是二层tuple
    for i in ret:
         tab.append(i[0])
    print('表数量: %s'%len(tab))
    print('表list: %s'%tab)
else:
    pass
m=1
result=[]
result.append(['表名','列名','空值数量','总数据量','空值率','字符类型','字段长度','备注','主键','权限'])
for i in tab:
    if m==100:
        break
        print(i)
    print("第" + str(m) + "个表")
    quary1="select count(*)  from  %s"%i
    retsc=cur.execute(quary1)
    retsc=cur.fetchall()
    quary2='''select  COLUMN_NAME from Information_schema.columns  where table_Name = '%s';'''%i
    ret1=cur.execute(quary2)
    ret1=cur.fetchall()
    for col in ret1:
        ll=[]
        quary3="""select count(*)  from  %s  AS AAA where  AAA.%s  is null; """%(i,col[0])
        print(quary3)
        ret2=cur.execute(quary3)
        ret2=cur.fetchall()
        quary4="""SELECT  DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLUMN_COMMENT,COLUMN_KEY,PRIVILEGES  from information_schema.COLUMNS where  TABLE_NAME=\'%s\' and COLUMN_NAME=\'%s\';"""%(i,col[0])
        print(quary4)
        re4=cur.execute(quary4)
        re4=cur.fetchall()
        print(re4)
        ll.append(i)
        ll.append(col[0])
        ll.append(ret2[0][0])
        ll.append(retsc[0][0])
        try:
            ll.append(str(round(ret2[0][0]/retsc[0][0],2)))
        except:
            ll.append(0)
        ll.append(re4[0][0])
        ll.append(re4[0][1])
        ll.append(re4[0][2])
        ll.append(re4[0][3])
        ll.append(re4[0][4])
        result.append(ll)
    m=m+1
print(result)
cur.close()
conn.close()


4、写excel


path='D:\\export'   # 输入文件路径
print("请输入文件名,如不输入,默认文件名export:  ")
exportname=input()
if exportname=='':
    exportname='export'
if os.path.exists('%s\%s.xlsx'%(path,exportname)):
    os.remove('%s\%s.xlsx'%(path,exportname))
print('导出文件路径: %s\%s.xlsx'%(path,exportname))
os.chdir('%s'%path)
inwb = openpyxl.Workbook()
inwb.create_sheet('西红柿真帅',0)
sheetname=inwb.get_sheet_names()
inwb.remove_sheet(inwb.get_sheet_by_name(sheetname[1]))
ws=inwb.get_sheet_by_name(sheetname[0])
for i in range(len(result)):
    for j in range(len(result[0])):
        ws.cell(row = i+1 , column = j+1).value = result[i][j]
inwb.save('%s.xlsx'%exportname)
print("success !!!")


数据质量调研搞完了,发给领导~


123.png

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
11 1
|
1天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
17 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
3天前
|
关系型数据库 MySQL 数据库
navicat过期了,直接用idea连接mysql
navicat过期了,直接用idea连接mysql
8 0
|
3天前
|
SQL 关系型数据库 MySQL
DQL操作MySql
DQL操作MySql
8 0
|
3天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
4天前
|
存储 算法 关系型数据库
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
|
4天前
|
存储 关系型数据库 MySQL
MySQL是怎样存储数据的?
MySQL是怎样存储数据的?
|
5天前
|
存储 JSON 数据挖掘
python序列化和结构化数据详解
python序列化和结构化数据详解
12 0
|
5天前
|
SQL 关系型数据库 MySQL
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
|
6天前
|
数据采集 数据可视化 数据挖掘
Python 与 PySpark数据分析实战指南:解锁数据洞见
Python 与 PySpark数据分析实战指南:解锁数据洞见