使用节点将JSON对象转换为mysql的最快方法

使用先前的示例? 我怎么能插入/更新一个MySQL表使用
没有手动命名表列标题的JSON对象? 并确保它asynchronous。

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(); }) 

你可以做这样的事情:

 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 }); } 

编辑

这就是你如何一次插入多个“post”。

 INSERT INTO posts (type, details) VALUES ('Helen', 24), ('Katrina', 21), 

你将不得不循环第一个值来得到这样的名字。

 var names = []; for(name in values[0]){ names.push(name); // That would give you name, email, id } 

那么你将不得不创build自己的string来插入。

 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 }); 

你将不得不自己testing代码,这只是你将如何做到这一点。

看看这里的“自定义格式”部分。 如果你注意到,这个例子在查询中使用了命名的占位符,允许你传递一个对象,而占位符被对象中的匹配属性替代。 为了清楚起见,我也粘贴了相关部分:

 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" }); 

您可以创build一个小函数,将具有该格式的数组映射到插入语句。

您可以轻松地遍历字段并使用一些string连接。

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

 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'); } ); });