使用Objective.js将数组数据批量插入mysql数据库
我有一个数组使用Objective.js将数组数据批量插入mysql数据库,mysql,node.js,knex.js,objection.js,Mysql,Node.js,Knex.js,Objection.js,我有一个数组 newData = [{ sId: 'XXXXXX', itemlName: 'LSストレッ', iCode: 'XXXXXX', iType: '', skus: 'XXXXXXX', iLevel: 'L2', cCode: '88', cName: 'Other', sCode: '999', sName: 'No Control', pLengthCode: '988', core: 'N', sCode: '1', dCode: 'XX', gDeptCode: 'XX'
newData = [{ sId: 'XXXXXX', itemlName: 'LSストレッ', iCode: 'XXXXXX', iType: '', skus: 'XXXXXXX', iLevel: 'L2', cCode: '88', cName: 'Other', sCode: '999', sName: 'No Control', pLengthCode: '988', core: 'N', sCode: '1', dCode: 'XX', gDeptCode: 'XX', gDeptName: 'Women\\\'s Items', rCode: 'jqs' },{ sId: 'XXXXXX', itemlName: 'LSストレッ', iCode: 'XXXXXX', iType: '', skus: 'XXXXXXX', iLevel: 'L2', cCode: '88', cName: 'Other', sCode: '999', sName: 'No Control', pLengthCode: '988', core: 'N', sCode: '1', dCode: 'XX', gDeptCode: 'XX', gDeptName: 'Women\\\'s Items', rCode: 'jqs' }]
我想使用objective.js将newData
插入mysql数据库。但是当我运行我的节点应用程序时,我得到了一个错误消息:
错误:批插入仅适用于Postgresql 我的插入代码是-:
samplemodel.query().insert( newData );
如何使用Objective.js在mysql数据库中批量插入数组数据?错误:批量插入仅适用于Postgresql 这意味着你需要Postgres而不是Mysql来让它工作 编辑1: 从文档中: 如果您使用的是Postgres,则插入会分批进行,以获得最大的成功 演出在其他数据库上,需要一次插入一行 时间这是因为postgresql是唯一一个 返回所有插入行的标识符,而不仅仅是第一行或第二行 最后一个 这意味着,如果您使用的是mysql,您应该这样做
samplemodel.query().insert(data);
用于“newData”数组中的每个元素。您可以调用
samplemodel.query().insertWithRelated(newData)代码>
如果需要,它将使用多个查询,并可用于所有数据库。诀窍是将insert语句转换为字符串并执行原始sql
差不多
让insertQuery=samplemodel.query().insert(newData);
让insertRes=wait knex.raw(insertQuery.toString())
附言:如果这不是一个好的做法,我会感谢你让我知道 因此,由于mysql的限制,无法减少查询数量
我会循环它,将它插入承诺数组并执行它抛出Promise.all
...
let insertPromises = []
for(let item of newData){
insertPromises.push(samplemode.query().insert(item))
}
Promise.all(insertPromises).then(() => { ... })
...
如果我将此方法与$query
或$relatedQuery
一起使用,我建议使用事务来确保数据完整性对不起,这不是问题的答案。为什么不?这似乎有助于解决问题,因为您的答案并没有解决问题,即:使用MySQL批量插入。OP将Mysql指定为一个标记。文档中指出,无法使用Mysql插入批处理,因此唯一的解决方案是逐个插入。您能给出一个使用promise.all的事务示例吗?