使用node将JSON对象导入mysql的最快方法

使用node将JSON对象导入mysql的最快方法,mysql,node.js,Mysql,Node.js,使用前面的例子?如何使用 没有手动命名表列标题的JSON对象?并确保它是异步的 var mysql = require('node-mysql'); var conn = mysql.createConnection({ ... }); var values = [ {name:'demian', email: 'demian@gmail.com', ID: 1}, {name:'john' , email: 'john@gmail.com' , ID: 2},

使用前面的例子?如何使用
没有手动命名表列标题的JSON对象?并确保它是异步的

var mysql = require('node-mysql');
var conn = mysql.createConnection({
    ...
});


var values = [
    {name:'demian', email: 'demian@gmail.com', ID: 1},
    {name:'john'  , email: 'john@gmail.com'  , ID: 2},
    {name:'mark'  , email: 'mark@gmail.com'  , ID: 3},
    {name:'pete ' , email: 'pete@gmail.com'  , ID: 4}
];

// var sql = "INSERT INTO Test (name, email, n) VALUES ?";


   conn.query(sql, [values], function(err) {
        if (err) throw err;
        conn.end();
    })

您可以创建一个小函数,将具有该格式的数组映射到insert语句


您可以轻松地在字段中循环并使用一些字符串连接

查看“自定义格式”部分。如果您注意到,此示例在查询中使用命名占位符,允许您传递对象,占位符将替换为对象中的匹配属性。为了清晰起见,我还粘贴了相关部分:

connection.config.queryFormat = function (query, values) {
  if (!values) return query;
  return query.replace(/\:(\w+)/g, function (txt, key) {
    if (values.hasOwnProperty(key)) {
      return this.escape(values[key]);
    }
    return txt;
  }.bind(this));
};

connection.query("UPDATE posts SET title = :title", { title: "Hello MySQL" });

你可以这样做:

for(var i = 0; i < values.length; i++){
    var post  = values[i]
    var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
         // Finish
    });
}
您必须循环第一个值才能得到这样的名称

var names = [];
for(name in values[0]){
names.push(name);
// That would give you name, email, id
}
然后您必须创建自己的字符串来插入

var newvalues = [];
for(var i = 0; i < values.length; i++){
    newvalues.push('(' + values[i].join(',') + ')');
}
您必须自己测试代码,这就是您要做的。

更好的选择是(使用MySQL连接):


您可以更改变量以匹配问题吗?似乎在循环中每次都可以访问数据库。有没有办法只访问数据库一次?大容量插入?colHeader=Object.keys(值[0])怎么样;去拿钥匙?有没有类似的价值观?这将删除一个for循环-好的,一个是为循环编写的。@KevinSimper您能尝试回答这个问题吗,它在某种程度上是相关的,但我不想进入任何类型的循环,只想使用sql语句处理所有事情@user2727195我的答案能帮你解决这个问题吗?
var newvalues = [];
for(var i = 0; i < values.length; i++){
    newvalues.push('(' + values[i].join(',') + ')');
}
connection.query('INSERT INTO posts (' + names.join(',') + ') VALUES ' + newvalues.join(',') , function(err, rows, fields) {
  // Result
});
app.get('/yourcontroller/:id', function (req, res) {

    var id = req.params.id;
    var dataUpdate = req.body;

    connection.query(
      'UPDATE yourtable SET ? Where ID = ?',
      [dataUpdate, id],
      function (err, result) {
        if (err) throw err;
        console.log('Updated data ! Changed ' + result.changedRows + ' rows');
      }
    );

});