Https://github.com/felixge/node-mysql जैसी किसी चीज़ का उपयोग करने पर कोई mySQL में बल्क इंसर्ट कैसे करेगा
Https://github.com/felixge/node-mysql जैसी किसी चीज़ का उपयोग करने पर कोई mySQL में बल्क इंसर्ट कैसे करेगा
जवाबों:
नेस्टेड सरणी का उपयोग करके बल्क आवेषण संभव है, जीथब पृष्ठ देखें
नेस्टेड सरणियों को समूहबद्ध सूचियों (थोक आवेषण के लिए)
[['a', 'b'], ['c', 'd']]
में बदल दिया जाता है , उदाहरण के लिए('a', 'b'), ('c', 'd')
आप बस तत्वों का एक नेस्टेड सरणी सम्मिलित करते हैं।
var mysql = require('mysql');
var conn = mysql.createConnection({
...
});
var sql = "INSERT INTO Test (name, email, n) VALUES ?";
var values = [
['demian', 'demian@gmail.com', 1],
['john', 'john@gmail.com', 2],
['mark', 'mark@gmail.com', 3],
['pete', 'pete@gmail.com', 4]
];
conn.query(sql, [values], function(err) {
if (err) throw err;
conn.end();
});
नोट: values
एक सरणी में लिपटे सरणियों का एक सरणी है
[ [ [...], [...], [...] ] ]
थोक प्रविष्टि के लिए एक पूरी तरह से अलग नोड-एमएसक्यूएल पैकेज भी है
conn.execute()
तैयार किए गए कथनों का उपयोग करने के समान सुरक्षा प्रदान करता है ? यदि नहीं, तो आवेषण करते समय तैयार किए गए बयानों का उपयोग करना संभव है? धन्यवाद।
@ 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]
विधि की तरह पारित करने की आवश्यकता है ।
?
बजाय एक विलक्षण की आवश्यकता है ??
।
मैं थोक डालने वाली वस्तुओं पर एक उत्तर की तलाश में था।
Ragnar123 के जवाब ने मुझे यह कार्य करने के लिए प्रेरित किया:
function bulkInsert(connection, table, objectArray, callback) {
let keys = Object.keys(objectArray[0]);
let values = objectArray.map( obj => keys.map( key => obj[key]));
let sql = 'INSERT INTO ' + table + ' (' + keys.join(',') + ') VALUES ?';
connection.query(sql, [values], function (error, results, fields) {
if (error) callback(error);
callback(null, results);
});
}
bulkInsert(connection, 'my_table_of_objects', objectArray, (error, response) => {
if (error) res.send(error);
res.json(response);
});
आशा करता हूँ की ये काम करेगा!
मैं आज ( mysql 2.16.0) में भाग गया और सोचा कि मैं अपना समाधान साझा करूंगा:
const items = [
{name: 'alpha', description: 'describes alpha', value: 1},
...
];
db.query(
'INSERT INTO my_table (name, description, value) VALUES ?',
[items.map(item => [item.name, item.description, item.value])],
(error, results) => {...}
);
सभी अपने जवाब के लिए Ragnar123 को सहारा देते हैं।
जोश हरिंगटन द्वारा डाले गए आईडी के बारे में बात करने के लिए पूछे गए सवाल के बाद मैं इसका विस्तार करना चाहता था।
ये क्रमिक होंगे। इस उत्तर को देखें: क्या MySQL बहु-पंक्ति आवेषण अनुक्रमिक स्वायत्त पहचान आईडी बनाती है?
इसलिए आप ऐसा कर सकते हैं (ध्यान दें कि मैंने 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 कहा है।)
उम्मीद है की यह मदद करेगा।
यह एक तेज़ "रॉ-कॉपी-पेस्ट" है, जो नोड के साथ mysql में फ़ाइल कॉलम को पुश करने के लिए छीन लिया गया है। js> = 11
कुछ सेकंड में 250k पंक्ति
'use strict';
const mysql = require('promise-mysql');
const fs = require('fs');
const readline = require('readline');
async function run() {
const connection = await mysql.createConnection({
host: '1.2.3.4',
port: 3306,
user: 'my-user',
password: 'my-psw',
database: 'my-db',
});
const rl = readline.createInterface({ input: fs.createReadStream('myfile.txt') });
let total = 0;
let buff = [];
for await (const line of rl) {
buff.push([line]);
total++;
if (buff.length % 2000 === 0) {
await connection.query('INSERT INTO Phone (Number) VALUES ?', [buff]);
console.log(total);
buff = [];
}
}
if (buff.length > 0) {
await connection.query('INSERT INTO Phone (Number) VALUES ?', [buff]);
console.log(total);
}
console.log('end');
connection.close();
}
run().catch(console.log);
?
बाद एकल रखना है VALUES
। इस तरह से स्तंभों के सरणियों की सरणी को बल्क आवेषण में स्वचालित रूप से संसाधित किया जा सकता है। इसका उपयोग 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;
};
यदि Ragnar
उत्तर आपके लिए काम नहीं करता है। यहाँ शायद ऐसा क्यों है (मेरे अनुभव के आधार पर) -
node-mysql
जैसा कि मेरा दिखाया गया मैं पैकेज का उपयोग नहीं कर रहा था Ragnar
। मैं mysql
पैकेज का उपयोग कर रहा था । वे अलग हैं (यदि आपने ध्यान नहीं दिया - मेरी तरह)। लेकिन मुझे यकीन नहीं है कि यह ?
काम नहीं करने के साथ कुछ भी करना है , क्योंकि यह mysql
पैकेज का उपयोग करने वाले कई लोगों के लिए काम करने के लिए लग रहा था ।
इसके बजाय एक चर का उपयोग करने का प्रयास करें ?
निम्नलिखित ने मेरे लिए काम किया -
var mysql = require('node-mysql');
var conn = mysql.createConnection({
...
});
var sql = "INSERT INTO Test (name, email, n) VALUES :params";
var values = [
['demian', 'demian@gmail.com', 1],
['john', 'john@gmail.com', 2],
['mark', 'mark@gmail.com', 3],
['pete', 'pete@gmail.com', 4]
];
conn.query(sql, { params: values}, function(err) {
if (err) throw err;
conn.end();
});
आशा है कि यह किसी की मदद करता है।
कुछ चीजें जो मैं उल्लेख करना चाहता हूं वह यह है कि मैं अपने डेटाबेस के साथ संबंध बनाने के लिए mysql पैकेज का उपयोग कर रहा हूं और आपने जो नीचे देखा है वह कोड काम कर रहा है और सम्मिलित थोक क्वेरी के लिए लिखा गया है।
const values = [
[1, 'DEBUG', 'Something went wrong. I have to debug this.'],
[2, 'INFO', 'This just information to end user.'],
[3, 'WARNING', 'Warning are really helping users.'],
[4, 'SUCCESS', 'If everything works then your request is successful']
];
const query = "INSERT INTO logs(id, type, desc) VALUES ?";
const query = connection.query(query, [values], function(err, result) {
if (err) {
console.log('err', err)
}
console.log('result', result)
});
मुझे भी ऐसी ही समस्या हो रही थी। यह केवल सरणियों की सूची में से एक को सम्मिलित कर रहा था। नीचे के बदलाव करने के बाद इसने काम किया।
उम्मीद है की यह मदद करेगा। मैं mysql npm का उपयोग कर रहा हूं।
Node.js में बल्क इंसर्ट नीचे दिए गए कोड का उपयोग करके किया जा सकता है। मैंने इस काम को पाने के लिए बहुत सारे ब्लॉग का उल्लेख किया है।
कृपया इस लिंक को भी देखें। https://www.technicalkeeda.com/nodejs-tutorials/insert-multiple-records-into-mysql-using-nodejs
काम करने का कोड।
const educations = request.body.educations;
let queryParams = [];
for (let i = 0; i < educations.length; i++) {
const education = educations[i];
const userId = education.user_id;
const from = education.from;
const to = education.to;
const instituteName = education.institute_name;
const city = education.city;
const country = education.country;
const certificateType = education.certificate_type;
const studyField = education.study_field;
const duration = education.duration;
let param = [
from,
to,
instituteName,
city,
country,
certificateType,
studyField,
duration,
userId,
];
queryParams.push(param);
}
let sql =
"insert into tbl_name (education_from, education_to, education_institute_name, education_city, education_country, education_certificate_type, education_study_field, education_duration, user_id) VALUES ?";
let sqlQuery = dbManager.query(sql, [queryParams], function (
err,
results,
fields
) {
let res;
if (err) {
console.log(err);
res = {
success: false,
message: "Insertion failed!",
};
} else {
res = {
success: true,
id: results.insertId,
message: "Successfully inserted",
};
}
response.send(res);
});
आशा है कि यह आपकी मदद करेगा।