【发布时间】:2020-02-24 21:44:31
【问题描述】:
我想使用单个插入语句将多行插入到 sqlite 数据库中。
在 Node JS 中,sqlite3 库允许我们执行来自 here 的操作。
但是在本教程中只有一列,我在插入具有多列的行时遇到了问题。
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
有人遇到过这样的问题吗? 提前感谢您的帮助。
【问题讨论】:
-
以编程方式将一堆一行插入全部作为一个事务更简单。
-
请edit您的帖子并向我们展示您的代码输出。是否有错误或是否正确报告插入的行数?您的
sample表是如何定义的?您正在尝试将值id插入名为“id”的列中。如果该列被定义为数字类型,则会引发错误。 -
我已经添加了输出,虽然ID的数据格式在数据库中是整数,但没有显示任何错误。
-
您需要展平该阵列。你有
[[a]]并且函数需要[a]。 -
如果你确定你的输入数据是安全的,你应该能够插入样本值 ('1','A'),('2','B') ....等等。占位符不是强制性的。