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环境下结果是否会不一样,可惜了。

相关推荐
40kuai几秒前
Mysql 主从同步
mysql
l1t2 分钟前
在postgres和duckdb中比较两个数组并只挑选不匹配的元素
数据库·sql·postgresql·数组·duckdb
阿佳举世无双3 分钟前
快速启动redis
数据库·redis·缓存
星辰_mya13 分钟前
redis主从同步-概览
数据库·redis·缓存
Apache Flink34 分钟前
Flink + Fluss 实战: Delta Join 原理解析与操作指南
大数据·数据库·flink
隔壁阿布都37 分钟前
Docker 安装 MySQL 8.0
mysql·docker·容器
花花无缺37 分钟前
搞清‘’时区设置‘’以及Mysql的`DATETIME` 和 `TIMESTAMP`
java·mysql
·云扬·40 分钟前
MySQL中count(*)深度解析与性能优化实践
数据库·mysql·性能优化
Predestination王瀞潞1 小时前
数据库MongoDB 8.2.3和Shell工具的安装
数据库
MediaTea1 小时前
Python:实例 __dict__ 详解
java·linux·前端·数据库·python