node-mysql的批量插入

此前我批量插入都是用类似这样的命令:

sql 复制代码
sqlcmd='insert into table(field1,field2,...) values ?'
indata=[["f1v1","f2v1"],["f1v2","f2v2"],...]
mysqlconn.query(sqlcmd,[indata],(err,res)=>{
	...
	})

但是感觉不太舒服,因为要在两处写出字段顺序,命令串里是字段名,数组里是字段值,顺序不能错,否则执行结果不符合预期。

我们知道单条记录插入是可以用以下方式执行

sql 复制代码
sqlcmd='insert into table set ?'
indata={filed1:"f1v1",filed2:"f2v1"}
mysqlconn.query(sqlcmd,indata,(err,res)=>{
	...

不必关注字段顺序的key-value对顺序,数据是以json方式定义,不容易出错。

那么批量插入难道不能用json数组这种方式书写么?

sql 复制代码
sqlcmd='insert into table values ?'
indata=[{filed1:"f1v1",filed2:"f2v1"},{filed1:"f1v2",filed2:"f2v2"},...]
mysqlconn.query(sqlcmd,indata,(err,res)=>{
	...
	})

网上搜到极客笔记里一篇《MySQL如何利用Node.js进行批量插入操作》,跟这个书写方式一样,文章里的意思是没有问题,而且作者还验证了下批量的速度。

但是在我的windows环境下却只能插入第一条数据,后面的都没有生效。

应该是在命令生成的时候,只解析了第一条,以下是node-mysql格式转换结果

sql 复制代码
//mysqlstr.js
const mysql = require("mysql"); 
const sqlcmd="insert into table set ?"
const indata=[
{field1:"f1v1",field2:"f2v1"},
{field1:"f1v2",field2:"f2v2"},
]
let mysqlstr=mysql.format(sqlcmd,indata);
console.log(mysqlstr)

indata数组后面的内容被丢弃了。。。

不知道linux环境下结果是否会不一样,可惜了。

相关推荐
孟陬7 分钟前
Bun Test 不支持时间快进?我用这招让单元测试提速 8 倍!
node.js·测试·bun
dongchen。1 小时前
MySQL第四次作业
数据库·mysql
普普通通的南瓜1 小时前
SM2 vs RSA/ECC:双算法 SSL 证书的性能对比与优化方案
数据库·网络协议·ssl
九章-1 小时前
中旅国际数据库国产化升级:以金仓KES打造安全可控的旅游服务底座
数据库·安全·旅游
Less^_^1 小时前
使用 Node.js 开发 Telegram Bot 完整指南
ai·node.js
pipip.2 小时前
Redis vs MongoDB:内存字典与文档库对决
数据库·redis·缓存
小白银子3 小时前
零基础从头教学Linux(Day 62)
数据库·mysql·oracle
Boilermaker19926 小时前
【MySQL 进阶】高性能优化
数据库·sql·mysql
CoderOnly7 小时前
SQL,CROSS JOIN速度优化
数据库·sql·mysql
Highcharts.js7 小时前
入门指南|从文件到图表:Highcharts对接数据库(CSV、Excel)实现数据同步绘制图表
数据库·excel·数据同步·highcharts·数据对接·文件导入