Я хочу вставить несколько строк в базу данных sqlite, используя один оператор вставки.
В Node JS библиотека sqlite3 позволяет нам делать то, что указано здесь .
Но в этом уроке только один столбец, я столкнулся с проблемой при вставке строк с несколькими столбцами.
var csv = require('csv');
var fs = require('fs');
const sqlite3 = require('sqlite3').verbose();
// opening the database connection
let db = new sqlite3.Database('CSVtoDB_CSVParse//sample.db');
var parser = csv.parse({delimiter: ','}, function(err, data) {
console.log(data);
languages = data;
let placeholders = languages.map((language) => '(?,?)').join(',');
let sql = 'INSERT INTO sample VALUES ' + placeholders;
// output the INSERT statement
console.log(sql);
db.run(sql, languages, function(err) {
if (err) {
return console.error(err.message);
}
console.log(`Rows inserted ${this.changes}`);
});
});
fs.createReadStream('CSVtoDB_CSVParse/sample1.csv').pipe(parser);
То, что я получаю в объекте данных после анализа CSV, выглядит следующим образом:
[ [ 'id', 'name' ],
[ '1', 'A' ],
[ '2', 'B' ],
[ '3', 'C' ],
[ '4', 'D' ],
[ '5', 'E' ],
[ '6', 'F' ],
[ '7', 'G' ],
[ '8', 'H' ],
[ '9', 'I' ],
[ '10', 'J' ] ]
Но после вставки данные моей таблицы базы данных выглядят так:
sqlite> select * from sample;
|
|
|
|
|
|
|
|
|
|
|
Выход:
[ '1', 'A' ],
[ '2', 'B' ],
[ '3', 'C' ],
[ '4', 'D' ],
[ '5', 'E' ],
[ '6', 'F' ],
[ '7', 'G' ],
[ '8', 'H' ],
[ '9', 'I' ],
[ '10', 'J' ] ]
INSERT INTO sample VALUES (?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?)
Rows inserted 11
Кто-нибудь сталкивался с такой проблемой?
Заранее спасибо за помощь.