Непрерывная вставка базы данных с Node.js и MySQL (невозможно поставить в очередь рукопожатие после того, как уже было добавлено рукопожатие) - PullRequest
0 голосов
/ 24 сентября 2019

Мне нужно стабильно вставлять значения в базу данных.Я пытался с этим кодом:

var mysql = require("mysql");
const random = require("random");

var con = mysql.createConnection({
  host: "xxx",
  user: "xxx",
  password: "xxx",
  database: "xxx"
});

con.connect(function(err) {
  while (true) {
    if (err) throw err;
    val1_ = random.int((min = 0), (max = 100));
    val2_ = random.int((min = 0), (max = 100));
    val3_ = random.int((min = 0), (max = 100));
    val4_ = random.int((min = 0), (max = 100));
    var sql =
      "INSERT INTO Table (val1, val2, val3, val4)VALUES (" +
      val1_ +
      "," +
      val2_ +
      "," +
      val3_ +
      "," +
      val4_ +
      ")";
    con.query(sql, function(err, result) {
      if (err) throw err;
    });
  }
});

, но я получаю это Ошибка: Cannot enqueue Handshake after already enqueuing a Handshake. Я знаю, что это, вероятно, не способ выполнить эту задачу, это просто заставить васпонять, что я хочу сделать.Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

В вашем app.js или аналогичном основном файле приложения:

const mysql = require('mysql');

const connection = mysql.createPool({
  connectionLimit: 10,
  host: process.env.DB_HOST || '127.0.0.1',
  user: process.env.DB_USER || 'local_user',
  password: process.env.DB_PASSWORD || 'local_password',
  database: process.env.DB_NAME || 'local_database'
});

global.db = connection;
// access the pool of connection anywhere without 
// additional require or module.exports

my_tasks.js или в другом месте вашего приложения, где выполняется вставка

const random = require('random');

// define the query, ? is a placeholder for object to be inserted
let sql = "INSERT INTO table_name SET ?;";


// begin your while loop if needed

//define object to be inserted where keys match table field names and values are your values
let payload = {
  val1_: random.int((min = 0), (max = 100)),
  val2_: random.int((min = 0), (max = 100)),
  val3_: random.int((min = 0), (max = 100)),
  val4_: random.int((min = 0), (max = 100)),
}

db.query(sql, payload, function(error, results, fields) {
  if (error) throw error;
  console.log(results);
});
// end your loop

Я не уверен, что именно вы проверяете в цикле while, но при необходимости его можно применить во втором блоке кода.

0 голосов
/ 25 сентября 2019

Эта ошибка выдается, когда вызываются последовательные connection.connect().Здесь вы должны быть хороши с удалением начального con.connect(), потому что con.query() неявно установит соединение.

См. Установление соединения раздел здесь

 while (true) {
  val1_ = random.int((min = 0), (max = 100));
  val2_ = random.int((min = 0), (max = 100));
  val3_ = random.int((min = 0), (max = 100));
  val4_ = random.int((min = 0), (max = 100));
  var sql =
    "INSERT INTO Table (val1, val2, val3, val4)VALUES (" +
    val1_ +
    "," +
    val2_ +
    "," +
    val3_ +
    "," +
    val4_ +
    ")";
  con.query(sql, function(err, result) {
    if (err) throw err;
  });
}

Для мульти-вставок ( Выше это не лучший способ сделать это ), предложите собрать данные и сделать это с помощью одной вставки:

let sql = `INSERT INTO Table(val1, val2, val3, val4) VALUES ? `;
let valsArray = [];
//while must have a terminating condition for that query to get executed/reached

    while (true) {
      val1_ = random.int((min = 0), (max = 100));
      val2_ = random.int((min = 0), (max = 100));
      val3_ = random.int((min = 0), (max = 100));
      val4_ = random.int((min = 0), (max = 100));
      valsArray.push([val1_, val2_, val3_, val4_]);
    }
    //notice valsArray would be an array of array values
    connection.query(sql, [valsArray], (err, results, fields) => {
      if (err) {
        return console.error(err.message);
      }
      // get inserted rows
      console.log("Row inserted:" + results.affectedRows);
    });

ПРИМЕЧАНИЕ: Дополнительные сведения об ошибках последовательных соединений в одном из их тестовые наборы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...