繁体   English   中英

如何将 json 数组数据插入 node.js 中的 mysql 中?

[英]How to insert a json array data into mysql in node.js?

我的 json 就像:

var data = [ {month: 1, customer: 11, revenue: 200},
             {month: 2, customer: 13, revenue: 210}
           ];

但是,当我使用 sql 查询"INSERT into t1 VALUES (data)"将其插入数据库时,出现错误: {"code":"ER_INVALID_JSON_TEXT","errno":3140,"sqlMessage":"Invalid JSON text: \"Invalid value.\" at position 1 in value for column t1.data

正确的查询语法应该是怎样的? 任何答案将不胜感激

您收到错误的原因是它必须是有效的 json 文本

即键名必须在 '' 引号中以及如果它们不是数字的值,这里是 json 字符串测试器来检查您的 json json 验证器的有效性

然后对您的数据进行字符串化并保存

var data = JSON.parse(body);
var responseJson = JSON.stringify(data.response);

var query = connection.query('INSERT INTO table SET column=?', responseJson, 
 function(err, result) {
 if(err) throw err;
 console.log('data inserted');
 });

如果您想将数据以 Json 数组的形式插入到数据库中,那么插入数据非常容易,无需对数据进行字符串化或进行任何其他操作。 我正在为您提供一种最简单的方法。 让我们来看看...

  1. 我有一个数据存储在变量用户中。
let users = [
  {
    "Email": "rachel@example.com",
    "EmployeeId": "9012",
    "Firstname": "Rachel",
    "Lastname": "Booker",
    "Department": "Sales",
    "Location": "Manchester"
  }, {
    "Email": "laura@example.com",
    "EmployeeId": "2070",
    "Firstname": "Laura",
    "Lastname": "Grey",
    "Department": "Depot",
    "Location": "London"
  }, {
    "Email": "craig@example.com",
    "EmployeeId": "4081",
    "Firstname": "Craig",
    "Lastname": "Johnson",
    "Department": "Depot",
    "Location": "London"
  },
];

现在我要在 Mysql 数据库上插入批量数据。 您可以选择您想要的任何内容,但要注意插入查询。

  1. 代码是==>
let sql = `insert ignore into employee values?`;

let values = [];

//an empty array and push the data in to values array using for loop.
//I have already created a table "Employee" with column name which is I am pushing //Data in same Manner.Note :- (Remember While Pushing data which will same Order as Your table column name)

//for loop is running till the length of the users;

for (let i = 0; i < users.length; i++) {
  values.push([users[i].Email, users[i].EmployeeId, users[i].Firstname, users[i].Lastname, users[i].Department, users[i].Location])
}

//Now Running the query (here con is a variable of database );

con.query(sql, [values], (err, result) => {
  if (err) throw err;
  console.log("rows affected " + result.affectedRows);
});

试试这个很容易没有任何长代码没有任何错误。

为了向 mysql 添加一个数组,需要形成正确的查询 Insert multiple rows 具有以下语法:
插入表名(column1,column2,column3)值
(1, 11, 200), // 第 1 行
(2, 13, 210) // 第 2 行

在您的情况下,您可以按如下方式创建请求:

const sqlQuery = `INSERT INTO t1 VALUES ` + data.map({month, customer, revenue} => `(${month}, ${customer}, ${revenue})`).join(',');

// if you use mysql client

var query = connection.query(sqlQuery, (err) => {
   if(err) throw err;
   console.log('data inserted');
});

您需要将数组包装在数组中以进行批量插入

var query = connection.query('INSERT INTO table SET column=?', [data], 
 function(err, result) {
 if(err) throw err;
 console.log('data inserted');
 });

谢谢你帮助我。 我只需要对我的数据进行字符串化,然后它就可以工作了。

var json = JSON.stringify(data);

这个回报

 '[{\"month\":11,\"year\":2019,\"customer\":10,\"revenue\":0},
   {\"month\":12,\"year\":2019,\"customer\":0,\"revenue\":100}]'

然后我简单地通过"INSERT INTO table VALUES (json);"插入它

我将为这种适用于我的案例留下这个简单的解决方案:

我的模型.js

exports.insert = async dataObj => {
  try {
    const TABLE_NAME = 'my-table';

    // mysql table fields
    const ARR_TABLE_FIELDS = ['ds_prop', 'ds_otherprop', 'created_at'];
    
    // mysql table values which only needs the values
    const ARR_VALUES = Object.entries(dataObj).map(keyValue => {
      // keyValue arg is an array
      // which provides the value in the second position
      return `'${keyValue[1]}'`
    });

    // mysql-handler will retrieve the data id
    const tableId = await mysqlHandler.insert(TABLE_NAME, ARR_TABLE_FIELDS, ARR_VALUES);

    return tableId;
  } catch (err) {
    console.error(err.message);
  }
};

mysql- handler.js 使用 NodeJS v12 + 和 npm package mysql2 版本2.2.5

  async insert(tableName, arrFields, arrValues) {

    const query = `INSERT INTO ${tableName} (${arrFields.toString()}) VALUES (${arrValues.toString()}, CURRENT_TIME())`;
    const response = await this.db.query(query);

    let id;

    if (response && Array.isArray(response) && response[0] && response[0].affectedRows > 0) {
      id = response[0].insertId;
    }

    return id;
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM