Массовая вставка объекта класса в базу данных sqllite в узле js - PullRequest
0 голосов
/ 30 октября 2019

У меня есть следующий класс с именем 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
    }
  }

У меня есть список объектов этого класса с именем labels, который я хочу вставить, или, скорее, массовая вставка в мою базу данных sqllite, которая выглядит следующим образом:следующее:

Label table in db

Я пытался вставить этот массив объектов класса с:

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();
}

, который дал мне следующие ошибкив консоли:

Uncaught Error: SQLITE_CONSTRAINT: ограничение NOT NULL не выполнено: Label.ImageID

Uncaught Ошибка: SQLITE_CONSTRAINT: сбой ограничения NOT NULL: Label.LabelHash

Может кто-нибудь объяснить мне, как это сделать правильно и как это сделать с массивными данными, а не forEach с массивом меток?

1 Ответ

1 голос
/ 30 октября 2019

Я думаю, что ошибка довольно прямолинейна - вы пытаетесь вставить значения NULL в столбцы без значения dul (Label.ImageID и Label.LabelHash).

Как решить эту проблему, зависит от того, что делаетсамый смысл для вашего приложения:

  • убрать ограничение NOT NULL для этих столбцов
  • пропустить метки, для которых ImageID и LabelHash не установлены
  • предоставляет значение по умолчанию (например, пустую строку) для ImageID и LabelHash cols
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...