Node JS Maria DB 批量插入问题
Node JS Maria DB Bulk Insert Issue
我正在尝试在数据库中批量插入产品,它似乎可以正常工作,因为它没有抛出任何错误,但它只是从数组中插入第一个值数组。当我检查 console.log 时,数组 returns 多个数组但只插入一个。知道这是从哪里来的吗?非常感谢!
const pool = mariadb.createPool({
...
multipleStatements: true
});
var conn = pool.getConnection();
var matchedProducts = [];
for (var ptm_i = 0; ptm_i < products_to_match.length; ptm_i++) {
value_to_add = products_to_match[ptm_i]['suid'];
var final_price = products_to_match[ptm_i]['finalprice']/100;
var initial_price = products_to_match[ptm_i]['price']/100;
var isOnSale = products_to_match[ptm_i]['onsale'];
var sizes = unique_id_sizes[value_to_add].join(',');
var store_details = [
products_to_match[ptm_i]['product_id'],
partner_id,
final_price,
initial_price,
isOnSale,
'USD',
sizes,
value_to_add,
products_to_match[ptm_i]['id'],
products_to_match[ptm_i]['url']
];
matchedProducts.push(store_details);
}
//console.log(matchedProducts);
try{
let matched_query = 'INSERT INTO stores (product_id, partner_id, price, initial_price, is_on_sale, currency, sizes, merchant_code, origin_id, link) VALUES ?';
conn.query(matched_query, matchedProducts, (error, result) => {
//console.log(result);
});
}catch(err){
console.log(err)
throw err;
}
}
我假设您在这里使用 mariadb
连接器。
要按批次插入,您使用:
connection.batch(sql, values) → Promise: fast batch processing.
没有
connection.query(sql[, values]) → Promise: Executes a query.
您可以找到文档 here。
这是一个例子:
// https://github.com/mariadb-corporation/mariadb-connector-nodejs/blob/master/documentation/batch.md
connection.beginTransaction();
connection.query("INSERT INTO BASKET(customerId) values (?)", [1], (err, res) => {
//must handle error if any
const basketId = res.insertId;
try {
connection.batch("INSERT INTO basket_item(basketId, itemId) VALUES (?, ?)",[
[basketId, 100],
[basketId, 101],
[basketId, 103],
[basketId, 104],
[basketId, 105]
]);
//must handle error if any
connection.commit();
} catch (err) {
connection.rollback();
//handle error
}
});
我正在尝试在数据库中批量插入产品,它似乎可以正常工作,因为它没有抛出任何错误,但它只是从数组中插入第一个值数组。当我检查 console.log 时,数组 returns 多个数组但只插入一个。知道这是从哪里来的吗?非常感谢!
const pool = mariadb.createPool({
...
multipleStatements: true
});
var conn = pool.getConnection();
var matchedProducts = [];
for (var ptm_i = 0; ptm_i < products_to_match.length; ptm_i++) {
value_to_add = products_to_match[ptm_i]['suid'];
var final_price = products_to_match[ptm_i]['finalprice']/100;
var initial_price = products_to_match[ptm_i]['price']/100;
var isOnSale = products_to_match[ptm_i]['onsale'];
var sizes = unique_id_sizes[value_to_add].join(',');
var store_details = [
products_to_match[ptm_i]['product_id'],
partner_id,
final_price,
initial_price,
isOnSale,
'USD',
sizes,
value_to_add,
products_to_match[ptm_i]['id'],
products_to_match[ptm_i]['url']
];
matchedProducts.push(store_details);
}
//console.log(matchedProducts);
try{
let matched_query = 'INSERT INTO stores (product_id, partner_id, price, initial_price, is_on_sale, currency, sizes, merchant_code, origin_id, link) VALUES ?';
conn.query(matched_query, matchedProducts, (error, result) => {
//console.log(result);
});
}catch(err){
console.log(err)
throw err;
}
}
我假设您在这里使用 mariadb
连接器。
要按批次插入,您使用:
connection.batch(sql, values) → Promise: fast batch processing.
没有
connection.query(sql[, values]) → Promise: Executes a query.
您可以找到文档 here。
这是一个例子:
// https://github.com/mariadb-corporation/mariadb-connector-nodejs/blob/master/documentation/batch.md
connection.beginTransaction();
connection.query("INSERT INTO BASKET(customerId) values (?)", [1], (err, res) => {
//must handle error if any
const basketId = res.insertId;
try {
connection.batch("INSERT INTO basket_item(basketId, itemId) VALUES (?, ?)",[
[basketId, 100],
[basketId, 101],
[basketId, 103],
[basketId, 104],
[basketId, 105]
]);
//must handle error if any
connection.commit();
} catch (err) {
connection.rollback();
//handle error
}
});