专栏首页python3数据库分批导出为csv文件

数据库分批导出为csv文件

boss需要1500万个手机号码,导出为excel文件

由于数量太大,直接存一个文件,打开电脑会直接卡死。

需要分为15批,每批100万。

可以手工在navicat软件上面运行,根据MySQL分页公式

(page-1)*page_size,page_size

也即是(当前分页-1)*每页数量,每页数量

示例sql:

select mobile from tbl_sms
LIMIT 0,1000000

第二页

select mobile from tbl_sms
LIMIT 1000000,1000000

.......

后面的依次类推

所以写了一个完整的php文件,部分引用数据库连接的地方,请自行修改

<?php
/**
 * Created by PhpStorm.
 * User: xx
 * Date: 2017/12/11
 * Time: 13:29
 */

set_time_limit(0);
//引入框架
include(dirname(__FILE__) .'/../header.php');
ini_set('memory_limit','1200M');

//导出为csv文件
function import_csv($i){
    //csv文件位置
    $filePath="/upload/tmp/sms/".$i. '.csv';
    //PHP文件处理类 SplFileObject,5.12版本以上都有
    $fileObj = new SplFileObject($filePath, 'ab');
    //分页公式 (page-1)*page_size,也即是(当前分页-1)*每页数量
    $start=($i-1)*1000000;
    //sql语句
    $sql="select mobile from tbl_sms_201711
    LIMIT $start,1000000";
    echo $sql."\n";
    //exit;
    //框架连接数据库,这里指定的是sms,执行sql语句
    //注意:这里我自己用的框架,请自行修改
    $res=db::connect('sms')->query($sql);
    //print_r($res);
    //遍历数组,写入文件
    foreach ($res as $values) {
        $fileObj->fputcsv(array_map(function ($item){
            return iconv('UTF-8', 'GBK', $item);
        }, $values));
    }
}

//执行15次
for ($i=1;$i<=15;$i++){
    import_csv($i);
}

执行效果如下:

select mobile from tbl_sms_201711

    LIMIT 0,1000000

select mobile from tbl_sms_201711

    LIMIT 1000000,1000000

select mobile from tbl_sms_201711

    LIMIT 2000000,1000000

select mobile from tbl_sms_201711

    LIMIT 3000000,1000000

select mobile from tbl_sms_201711

    LIMIT 4000000,1000000

select mobile from tbl_sms_201711

    LIMIT 5000000,1000000

select mobile from tbl_sms_201711

    LIMIT 6000000,1000000

select mobile from tbl_sms_201711

    LIMIT 7000000,1000000

select mobile from tbl_sms_201711

    LIMIT 8000000,1000000

select mobile from tbl_sms_201711

    LIMIT 9000000,1000000

select mobile from tbl_sms_201711

    LIMIT 10000000,1000000

select mobile from tbl_sms_201711

    LIMIT 11000000,1000000

select mobile from tbl_sms_201711

    LIMIT 12000000,1000000

select mobile from tbl_sms_201711

    LIMIT 13000000,1000000

select mobile from tbl_sms_201711

    LIMIT 14000000,1000000

查看/upload/tmp/sms目录

total 175800
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 10.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 11.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 12.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 13.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 14.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:37 15.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 1.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 2.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 3.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 4.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 5.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:35 6.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 7.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 8.csv
-rw-r--r-- 1 root root 12000000 Dec 12 15:36 9.csv

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python Flask离线安装与测试

    Flask是用python进行web开发时,常见的python web框架。 如果服务器可以连接到外网,可以简单的用 pip install Flask 直接将...

    py3study
  • Linux Python

    [root@zylpython]#wgethttp://python.org/ftp/python/2.7.8/Python-2.7.8.tgz

    py3study
  • python中os. popen sy

    python调用Shell脚本或者是调用系统命令,有两种方法: os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,正确会返...

    py3study
  • 树莓派修改swap空间

    树莓派的raspbian就是一个linux系统,默认这个系统烧到sd卡里之后是都分好区了的,但是是没有swap分区,只有一个boot分区还有一个系统分区。所以一...

    bboysoul
  • 我的tkinter学习笔记5

    用户6367961
  • 1TB字节有多大?

    我们都知道,硬盘的储存容量是用字节(Byte)来表示的。1个字节是最小的储存单位。 1KB(kilobyte)表示1024个字节,1MB表示1024个KB,1G...

    ruanyf
  • Python爬虫学习,记一次抓包获取js,从js函数中取数据的过程

    昨天有小伙伴找我,新浪新闻的国内新闻页,其他部分都是静态网页可以抓到,但是在左下方的最新新闻部分,不是静态网页,也没有json数据,让我帮忙抓一下。大概看了下,...

    云飞
  • Python爬虫学习,记一次抓包获取js,从js函数中取数据的过程

    昨天有小伙伴找我,新浪新闻的国内新闻页,其他部分都是静态网页可以抓到,但是在左下方的最新新闻部分,不是静态网页,也没有json数据,让我帮忙抓一下。大概看了下,...

    云飞
  • 【案例】如何用html5 制作canvas酷炫的网状图形动画特效

    话不多说,咱们书归正传!今天段老师要给同学们介绍的是一款基于html5 canvas实现酷炫的网状几何图形变换动画特效源码。

    用户1730674
  • linux telnet命令

    telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远...

    于小勇

扫码关注云+社区

领取腾讯云代金券