当前位置: 首页 > news >正文

excel大表导入数据库

前文介绍了数据量较小的excel表导入数据库的方法,在数据量较大的情况下就不太适合了,一个是因为mysql命令的执行串长度有限制,二是node-xlsx这个模块加载excel文件是整个文件全部加载到内存,在excel文件较大和可用内存受限的场景就不适合了。我们可以考虑流式读取excel数据,分批次导入数据到数据库。以下是以每批500条记录的示例:

const XLSX = require('xlsx-extract').XLSX;const mysql = require("mysql2/promise"); const localpool= mysql.createPool({host:"127.0.0.1",port:3306,user:"demouser",password:"XXXXXX",database:"demodb",jsonStrings: true,waitForConnections: true,connectionLimit: 4,enableKeepAlive: true, keepAliveInitialDelay: 5000,});const batchsize=500;let count=0;
let frist=true;
let batarr=[];
let fieldnames="";
let fieldcounts=0;new XLSX().extract(process.argv.slice(2)[0], {sheet_id:1}).on('row', function (row) {if (frist) { frist=false; fieldcounts=row.length; fieldnames=row.join(); }else {for (let j=row.length;j<fieldcounts;j++) row.push("");batarr.push(row);if (batarr.length==batchsize) { let addrecs = "insert into demodb.demotable("+fieldnames+") values ?"; localpool.query(addrecs,[batarr]).then(([results])=>{ console.log(results); batarr=[];}).catch(err=>{console.log(err);});}}}).on('error', function (err) {console.error('error', err);}).on('end', function (err) {if (batarr.length>0) { let addrecs = "insert into demodb.demotable("+fieldnames+") values ?"; localpool.query(addrecs,[batarr]).then(([results])=>{ console.log(results); }).catch(err=>{console.log(err);});}});

xlsx-extract这个模块读取行数据时,中间的空白单元会解析成undefined,但是最后一个有值的单元后就截止了,为了和数据库里的字段数保持一致,要将剩余的字段赋值下,示例中赋值为空字符串。
这样可以导入excel大文件进数据库。
其实这样导入数据效率比直接将csv或json文件直接导入mysql效率要低很多,不过有时候转的csv文件或者json文件导入mysql会出现报错情况,需要检查字段值,数据量较大时检查会很麻烦,所以这样导入数据也是不得已的办法。

相关文章:

  • RAG 2.0 深入解读
  • OSPF不规则区域划分
  • 从代码学习深度学习 - 语义分割和数据集 PyTorch版
  • 部署RocketMQ
  • 垃圾对象回收
  • 2025年5月15日前 免费考试了! Oracle AI 矢量搜索专业​​认证
  • 青藏高原东北部祁连山地区250m分辨率多年冻土空间分带指数图(2023)
  • [虚幻官方教程学习笔记]深入理解实时渲染(An In-Depth Look at Real-Time Rendering)
  • LeetCode热题100--240.搜索二维矩阵--中等
  • kotlin flow防抖
  • 聊一聊接口测试时如何处理接口或版本变更
  • 基于STM32的甲醛检测
  • Win10无法上网:Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目找不到域 TEST 的域控制器DNS 解析存在问题
  • Git简介和发展
  • LeakCanary
  • 6. 存储池配置与CephFS创建 ceph version 14.2.22
  • Java 中的反射详解
  • 发行基础:本地化BUG导致审核失败
  • 【AlphaFold2】深入浅出,Feature Embedding|学习笔记
  • ev_loop_fork函数
  • 韩国执政党总统候选人更换方案被否决,金文洙候选人资格即刻恢复
  • 中俄弘扬正确二战史观:缅怀历史,重拾初心,阻止悲剧重演
  • 《中国人民银行业务领域数据安全管理办法》发布,6月30日起施行
  • 国博馆刊|北朝至唐初夏州酋豪李氏家族的发展与身份记忆
  • 商务部再回应中美经贸高层会谈:美方要拿出诚意、拿出行动
  • 中国驻美国大使馆发言人就中美经贸高层会谈答记者问