有什么方法可以在nodejs的mysql“插入”查询中动态设置多个值?

时间:2019-09-01 11:58:01

标签: mysql node.js

我是第一次使用nodejs。我有一个场景,其中有如下所示的json数组。 我不知道该数组中会有多少个json项目。

我已经尝试过使用循环的解决方案,但是它将多次触发查询。我不想要那个。

{"qualification":[{"degreeName":"B","domain":"p"},{"degreeName":"A","domain":"q"}]}

并且mysql查询将是这样

INSERT INTO qualification (degreeName,domain) VALUES (B,p),(A,q);

在上面的查询中,我已经明确地编写了值,但是由于我不知道会有多少个值,因此无法编写这样的值,相反,我将必须将所有值都放入变量中,然后将其传递给查询。 因此,如何检索资格数据并将其转换为变量或元组以放入mysql查询中,从而可以触发单个查询并添加多个值。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:您必须从动态值生成values数组,然后传递给查询。

  

关键点:?是一个未命名的参数(占位符别名),使其成为 Parameterized Query

const mysql = require('mysql');

const con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
  let sql = "INSERT INTO qualification (degreeName, domain) VALUES ?";
  let values = [
    ['B', 'p'],
    ['A', 'q'],
    ...
  ]; //this is dynamic value that you can create
  con.query(sql, [values], function (err, result) {
    if (err) throw err;
    console.log("Number of records inserted: " + result.affectedRows);
  });
});

要从数据集中生成元组(values)(假设数据将采用该格式):

const payload = {
  qualification: [
    { degreeName: "B", domain: "p" },
    { degreeName: "A", domain: "q" }
  ]
};
const tuples = payload.qualification.map(obj => [obj.degreeName, obj.domain]);

哪个OP像这样:

[ [ 'B', 'p' ], [ 'A', 'q' ] ]