IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql游标分段遍历统计数量 -> 正文阅读

[大数据]mysql游标分段遍历统计数量

小白写个小代码。

因为数据库有的表数据量很大,例如几千万,每条语句的查询时长有限制,不然会影响别人使用此数据库的速度,所以建议使用mysql游标分段遍历统计数量,设置合适的分段范围,尽量减少查询时间,不影响别人。

# -*- coding:utf-8 -*-
"""
作者:孙敏
日期:2022年01月15日
"""
import pymysql
from tqdm import tqdm

#填写对应的mysql连接信息
host = 'localhost'
port = 3306
user = 'root'
password = '1234'
database = 'sunmin'
#连接mysql数据库
db =pymysql.connect(host=host,port=port,user=user,password=password,
                         database=database,charset='utf8')
#使用游标
cursor = db.cursor()


#使用sql语句对id进行分段查询database对应数据库中的表,将查询结果直接打印
def total_count(start,end,step):
    allnumber = [] #为求和函数做准备:先定义一个空列表,后续往此列表内赋值,然后使用sum函数求和
    for i in tqdm(range(start,end,step),'进度'):#代表id范围和步长
        section = list((i,i+step-1))
        cursor.execute(sql,section)#执行单个sql语句
        first_record = cursor.fetchone()#取出查询语句的第一个元素
        allnumber.append(int(first_record[0]))
    totalcount = sum(allnumber)
    print('sql查询所得总数量:'+str(totalcount))



#使用sql语句对id进行分段查询database对应数据库中的表,将查询结果生成excel表格
def output_as_a_excel_table(path,start,end,step):
    xlsx_list = []
    for i in tqdm(range(start,end,step),'进度'):#代表id范围和步长
        section = list((i,i+step-1))
        cursor.execute(sql,section)#执行单个sql语句
        first_record = cursor.fetchone()#取出查询语句的第一个元素
        y = []#定义一个列表,主要使输出结果的xlsx_list列表的元素还是列表
        b=str(section)
        y.append(b)#为xlsx_list列表元素的子列表添加第一个元素
        c=str(first_record[0])
        y.append(c)#为xlsx_list列表元素的子列表添加第二个元素
        xlsx_list.append(y)#为xlsx_list列表添加子列表元素
    result = open(path, 'w', encoding='gbk')
    # 参数'w'代表往指定表格写入数据,会先将表格中原本的内容清空
    # 若把参数’w'修改为‘a+',即可实现在原本内容的基础上,增加新写入的内容
    result.write('id区间\t对应数量\n')
    for m in range(len(xlsx_list)):
        for n in range(len(xlsx_list[m])):
            result.write(str(xlsx_list[m][n]))
            result.write('\t')  # '\t'表示每写入一个元素后,会移动到同行的下一个单元格
        result.write('\n')# 换行操作
    result.close()


if __name__ == '__main__':
    #填写对应变量的具体值和sql语句
    start = 1
    end = 29334
    step = 500
    path = 'D:\python\测试1.xls'
    sql = "select count(id) from customer where id between %s and %s"
    # 调用函数
    total_count(start,end,step)
    output_as_a_excel_table(path,start,end,step)

cursor.close()#关闭游标
db.close()#关闭数据库连接

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:08:20  更:2022-01-16 13:08:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:30:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码