【问题标题】:Insert multiple rows into sqlite database at once一次将多行插入sqlite数据库
【发布时间】: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') ....等等。占位符不是强制性的。

标签: node.js sqlite


【解决方案1】:

使用 Node js 将用户名和密码插入 SqliteDB

login.html

<form action="auth" method="POST">
<input type="text" name="username" placeholder="Username" autocomplete="off" required>
<input type="password" name="password" placeholder="Password" autocomplete="off" required>
<input type="submit">   
</form>

login.js

    const sqlite3 = require('sqlite3').verbose();//getting the Sqlite3 DB
    var express = require('express');//require the Express framework
    var session = require('express-session');
    var bodyParser = require('body-parser');
    var path = require('path');
    let db = new sqlite3.Database('./NodeTest.db');//getting the DataBase from Databasename
    var app = express();
    app.use(session({
        secret: 'secret',
        resave: true,
        saveUninitialized: true
    }));
    app.use(bodyParser.urlencoded({extended : true}));
    app.use(bodyParser.json());    
    app.get('/', function(request, response) {
        response.sendFile(path.join(__dirname + '/login.html'));
    });
    app.post('/auth', function(request, response) {     
        var username = request.body.username;//getting the username from the request
        var password = request.body.password;//getting the password from the request
    db.run('Insert into Credentials(Username,Password) Values(?),(?)',[username,password],function(error){});
    response.end();
    });
    app.listen(3000);//port number is mentioned

【讨论】:

  • 这不是问题所在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
相关资源
最近更新 更多