接続 - node.js mysql コネクションプール



node.jsを使用してmySQLに一括挿入を実行するにはどうすればよいですか (5)

Ragnarの答えがあなたのために働かないなら。 ここにはおそらく(なぜ私の経験に基づいて)

  1. 私は私のRagnarようにnode-mysqlパッケージを使用していませんでした。 私はmysqlパッケージを使用していました。 彼らは違っています(あなたが気づかなかったら私のように)。 しかし、私はそれが何かと関係がある?わからないの? mysqlパッケージを使用している多くの人々にとってはうまく動作していたようです。

  2. 代わりに変数を使用してみてください?

次は私のために働いた -

var mysql = require('node-mysql');
var conn = mysql.createConnection({
    ...
});

var sql = "INSERT INTO Test (name, email, n) VALUES :params";
var values = [
    ['demian', '[email protected]', 1],
    ['john', '[email protected]', 2],
    ['mark', '[email protected]', 3],
    ['pete', '[email protected]', 4]
];
conn.query(sql, { params: values}, function(err) {
    if (err) throw err;
    conn.end();
});

これが誰かを助けることを望みます。

https://ffff65535.com

https://github.com/felixge/node-mysqlようなものを使用している場合、どのようにして一括してmySQLに挿入しhttps://github.com/felixge/node-mysqlhttps://github.com/felixge/node-mysql


ここで必要なのは、配列の挿入方法

リクエストは郵便配達員からのものです(あなたは「ゲスト」を見ます)

 {
  "author_id" : 3,
  "name" : "World War II",
  "date" : "01 09 1939", 
  "time" : "16 : 22",
  "location" : "39.9333635/32.8597419",
  "guests" : [2, 3, 1337, 1942, 1453]
}

そしてスクリプトの仕方

var express = require('express');
var utils = require('./custom_utils.js');

module.exports = function(database){
    var router = express.Router();

    router.post('/', function(req, res, next) {
        database.query('INSERT INTO activity (author_id, name, date, time, location) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE name = VALUES(name), date = VALUES(date), time = VALUES(time), location = VALUES(location)', 
                [req.body.author_id, req.body.name, req.body.date, req.body.time, req.body.location], function(err, results, fields){
            if(err){
                console.log(err);
                res.json({ status: utils.respondMSG.DB_ERROR });
            }
            else {
                var act_id = results.insertId;
                database.query('INSERT INTO act_guest (user_id, activity_id, status) VALUES ? ON DUPLICATE KEY UPDATE status = VALUES(status)', 
                        [Array.from(req.body.guests).map(function(g){ return [g, act_id, 0]; })], function(err, results, fields){
                    if(err){
                        console.log(err);
                        res.json({ status: utils.respondMSG.DB_ERROR });
                    }
                    else {
                        res.json({ 
                            status: utils.respondMSG.SUCCEED,
                            data: {
                                activity_id : act_id
                            }
                        });
                    }
                });
            }
        });
    });
    return router;
};

彼の答えはRagnar123のすべての小道具。

Josh Haringtonが挿入したIDについて質問する質問の後に、私はそれを拡張したかっただけです。

これらは順次になります。 この答えを見てください: MySQLの複数行の挿入は連続した自動インクリメントIDを取得しますか?

したがって、これを行うことができます(私がresult.insertIdを使って行ったことに注意してください):

  var statement = 'INSERT INTO ?? (' + sKeys.join() + ') VALUES ?';
  var insertStatement = [tableName, values];
  var sql = db.connection.format(statement, insertStatement);
  db.connection.query(sql, function(err, result) {
    if (err) {
      return clb(err);
    }
    var rowIds = [];
    for (var i = result.insertId; i < result.insertId + result.affectedRows; i++) {
      rowIds.push(i);
    }
    for (var i in persistentObjects) {
      var persistentObject = persistentObjects[i];
      persistentObject[persistentObject.idAttributeName()] = rowIds[i];
    }
    clb(null, persistentObjects);
  });

(私はpersistentObjectsと呼ばれるオブジェクトの配列から値を取り出した。)

お役に立てれば。


私はまだコメントすることができないので、答えを提出する。

@ Ragnar123の答えは正しいですが、私はそれが動作していないと言うコメントの多くの人が表示されます。 私は同じ問題を抱えていて、あなたの配列を[]で囲む必要があるようです

そう

 var pars = [
        [99, "1984-11-20", 1.1, 2.2, 200], 
        [98, "1984-11-20", 1.1, 2.2, 200], 
        [97, "1984-11-20", 1.1, 2.2, 200]
      ];

メソッドに[pars]ように渡す必要があります。

お役に立てれば。


私も同様の問題を抱えていた。 配列のリストから挿入するだけでした。 それは以下の変更を加えた後に機能しました。

  1. [params]をクエリメソッドに渡しました。
  2. insert(a、b)からtable1の値(?)==> insert(a、b)をtable1の値に変更しましたか? 。 すなわち、 疑問符のまわりの大理石を削除しました。

お役に立てれば。 私はmysql npmを使用しています。





node.js