我正在尝试使用node.js和mysql模块从表中选择数据,操作该数据,然后将操作数据插入数据库中的另一个表。
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'username',
password: 'pass',
database: 'db',
});
var q = 'SELECT * FROM table1';
var data_wanted = [];
connection.query(q, function(err, result) {
for(var i = 0; i < 100; i++) { //let's say there are 100 rows in table1
var manipulated_data = result + 1;
data_wanted.push(manipulated_data);
}
});
理想情况下,我将采用data_wanted中的值并将其批量插入。像这样:
var q2 = 'INSERT into table2 (number) VALUES ?';
connection.query(q2, [data_wanted], function(err, result) {
//bulk inserts data_wanted[]
});
但是,data_wanted不会从第一个查询中获取数据。
console.log(data_wanted) //outputs []; still empty, even after 1st query
我认为这是一个范围问题。但是我不知道如何真正解决这个问题。非常感谢您的帮助。
答案 0 :(得分:1)
应该是这个
var q2 = 'INSERT into table2 (number) VALUES (?)';
我认为这只是您所缺少的括号。
您正在使用语句,因此您当然必须添加更多代码。
希望我能帮上忙。
答案 1 :(得分:0)
您可以使用一个查询全部插入。 这个例子:
INSERT INTO users_log (`name`,`address`)
SELECT u.`name`,u.`address`
FROM users u ;
表users_log:
此链接文档:https://dev.mysql.com/doc/refman/8.0/en/insert-select.html
答案 2 :(得分:0)
主要原因是代码没有连接到数据库。查询sql之前必须先连接数据库。您可以通过这种方式进行引用。
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'username',
password: 'pass',
database: 'db',
});
connection.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
var q = 'SELECT * FROM table1';
var data_wanted = [];
connection.query(q, function(err, result) {
result.forEach(function(row) {
console.log(row);
data_wanted.push(row);
});
console.log(data_wanted);
});