php - 从数据库导出百万级数据(CSV文件)

将数据库连接信息、查询条件、标题信息替换为真实数据即可使用。

<?php
set_time_limit(0);
ini_set(‘memory_limit‘, ‘128M‘);

$fileName = date(‘YmdHis‘, time());
header(‘Content-Encoding: UTF-8‘);
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header(‘Content-Disposition: attachment;filename="‘ . $fileName . ‘.csv"‘);

//打开php标准输出流
//以写入追加的方式打开
$fp = fopen(‘php://output‘, ‘a‘);

//连接数据库
$dbhost = ‘127.0.0.1‘;
$dbuser = ‘root‘;
$dbpwd = ‘‘;
$con = mysqli_connect($dbhost, $dbuser, $dbpwd);
if (mysqli_connect_errno()) {
   die(‘connect error‘);
}
//选择数据库
$database = ‘test‘;
mysqli_select_db($con, $database);
//设置编码
mysqli_query($con, "set names UTF8");

//我们试着用fputcsv从数据库中导出1百万的数据
//我们每次取1万条数据,分100步来执行
//如果线上环境无法支持一次性读取1万条数据,可把$nums调小,$step相应增大。
$step = 100;
$nums = 10000;
$where = ""; //筛选条件

//设置标题
$title = array(‘ID‘,‘姓名‘,‘年龄‘,‘性别‘);
foreach($title as $key => $item) {
    $title[$key] =iconv("UTF-8", "GBK", $item);
}
//将标题写到标准输出中
fputcsv($fp, $title);

for($s = 1; $s <= $step; $s++) {
    $start = ($s - 1) * $nums;
    $result = mysqli_query($con,"SELECT * FROM `test` ".$where." ORDER BY `id` LIMIT {$start},{$nums}");
    if($result) {
        while($row = mysqli_fetch_assoc($result)) {
            foreach($row as $key => $item) {
                //这里必须转码,不然会乱码
                $row[$key] = iconv("UTF-8", "GBK", $item);
            }
            fputcsv($fp, $row);
        }
        mysqli_free_result($result); //释放结果集资源

        //每1万条数据就刷新缓冲区
        ob_flush();
        flush();
    }
}
//断开连接
mysqli_close($con);

原文地址:https://www.cnblogs.com/whx-blogs/p/9973482.html

时间: 2024-10-14 00:33:57

php - 从数据库导出百万级数据(CSV文件)的相关文章

使用存储过程将Oracle数据批量导出为多个csv文件

数据库有如下表结构: user_info (   user_id           NUMBER primary key,   user_name     VARCHAR2(200) NOT NULL,         user_age        VARCHAR2(80),   create_date    DATE,   create_order   NUMBER ) 现在有100万条记录,要求每1000条记录导出为一个csv文件,内容用逗号分隔,共计1000个文件, 文件名称格式为ou

Python读取/导出(写入)CSV文件

参考资料:https://docs.python.org/2/library/csv.html 生成csv文件 import csv with open('egg.csv', 'wb') as csvfile: spamwriter = csv.writer(csvfile,dialect='excel') spamwriter.writerow(['a', '1', '1', '2', '2']) spamwriter.writerow(['b', '3', '3', '6', '4']) s

python提取百万数据到csv文件

转自:http://www.2cto.com/kf/201311/258112.html 今天有需求,需要把系统所有用户注册的id和邮箱等信息导出来提供给他们,在mysql里面count了下,大概有350万左右 就尝试了下用python实现,顺带练习下python写csv的功能,本来想用工具的,但想了下速度会很慢, 整个导出过程大概就3分钟左右,还是蛮快的,毕竟有三百多万,导完后有150M左右 下面是我的脚本deal_csv.py,由于需要连接mysql数据库,脚本依赖MySQLdb模块 ? 1

导出查询结果到csv文件

set colsep , set feedback off set heading off set trimout on spool my.csv select * from emp; spool off

mysql将表数据导出为txt或csv文件

语法:select 字段 from 表名 into outfile 路径 示例txt:select * from stu_class into outfile './stu_class.text'; 示例csv:select * from stu_class into outfile './stu_class.text'; 如果需要按照指定格式分隔数据呢? 使用可选选项:fields terminated by  "-"; 示例:select * from stu_class into

oracle导出多CSV文件的靠谱的

oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从oracle数据库中导出80w数据到csv文件,如用户给定名字为a.csv(文件最大4000行记录),则自动生产文件为a_1.csv,a_2.csv,...., a_200.csv 我已经实现了一个方法,但80w要导5小时,用户没法接受.如下: sqlplus -s user/pwd @${SqlDir}/

mysql 导入csv文件

mysql> load data local infile '/root/bao/pingtaizhangwumingxi/20170206_zwmx-pt-rmb_297308.csv' into table platform_billing_details fields TERMINATED BY ',' LINES TERMINATED BY '\r\n' ignore 1 lines; Linux 用 shell 脚本 批量 导入 csv 文件 到 mysql 数据库 前提: 每个csv

百万级数据记录量优化查询以及导出EXCEL文件编程

通过对完整软件实例(工程设计流水管理系统)编程讲解,让学员熟悉完整软件布局架构及开发思路.比如从界面布局.登录验证.软件注册程序.到软件发布等知识点,贯穿知识点间联系,提升编程整合能力. 中文编程完整软件实例编程解析之工程设计流水管理系统(8课时) 第1课:整体布局.EXCEL表数据导入到软件数据库编程a.整体布局b.EXCEL表数据导入到软件数据库编程第2课:基本信息预先设置编程a.项目名称预设置 第3课:子项目工程日志流水编程解析a.工程日志流水编程 第4课:子项目设计费发放流水编程解析a.

mysql数据库导出CSV乱码问题

一.导出汉字为乱码 1. 鼠标右键点击选中的 csv 文件,在弹出的菜单中选择"编辑",则系统会用文本方 式(记事本)打开该 csv 文件: 2. 打开 csv 文件后,进行"另存为"操作,在弹出的界面底部位置有"编码",修改编码方式即可: 从UTF-8改成 ANSI .保存: 3. 再用 excel 打开后,显示汉字正常. 二.导出内容一行在一个单元格中 选择数据库表 --> 右击属性 --> 备份/导出 --> 导出表数据作