簡體   English   中英

在節點js的sqllite數據庫中批量插入class object

[英]Bulk insert class object in sqllite database in node js

我有以下 class 稱為 Label:

class Label{
    constructor(imageid, plotid, camera, date, x, y, w, h, id, hash){
      this.imageid = imageid;
      this.plotid = plotid;
      this.camera = camera;
      this.date = date;
      this.x = x;
      this.y = y;
      this.w = w;
      this.h = h;
      this.id = id;
      this.hash = hash
    }
  }

我有這些 class 對象的列表,這些對象稱為我想要插入的labels ,或者更確切地說是批量插入到我的 sqllite 數據庫中,如下所示:

db中的標簽表

我試圖插入這個 class 對象數組:

function addRowsToDb(){
    console.log("Adding rows to the db")
    db = new sqlite3.Database('./annotator.db');
    db.serialize(function() {

        var stmt = db.prepare("INSERT INTO Label(ImageID, PlotID, Camera, Date, x, y, w, h, LabelHash) VALUES (?,?,?,?,?,?,?,?,?)");
        labels.forEach((label) => {
            stmt.run(label.imageid, label.plotid, label.camera, label.date, label.x, label.y, label.w, label.h, label.hash);
        })
        stmt.finalize();
    });
    db.close();
}

這在控制台中給了我以下錯誤:

未捕獲的錯誤:SQLITE_CONSTRAINT:NOT NULL 約束失敗:Label.ImageID

未捕獲的錯誤:SQLITE_CONSTRAINT:NOT NULL 約束失敗:Label.LabelHash

有人可以向我解釋如何正確執行此操作以及如何使用批量數據執行此操作,而不是帶有標簽數組的 forEach 嗎?

我認為錯誤很簡單-您嘗試將NULL值插入不可為空的數據庫列( Label.ImageIDLabel.LabelHash

如何解決這個問題取決於什么對您的應用最有意義:

  • 刪除這些列上的NOT NULL約束
  • 跳過沒有設置ImageIDLabelHash的標簽
  • ImageIDLabelHash cols 提供默認值(例如空字符串)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM