Ограничение SQLite FOREIGN KEY не запускается из NodeJS / JavaScript - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь создать маршрут POST, как показано ниже. В моей таблице расписаний установлено ограничение FOREIGN KEY, ссылающееся на таблицу Employee. Когда я пытаюсь вставить расписание от сотрудника, который не существует, используя DB Browser, я получаю правильную ошибку, вызванную ограничением. Однако, когда я запускаю приведенный ниже код, он игнорирует это ограничение и вставляет запись. Я настроил это неправильно или это недопустимое ограничение в этом сценарии?

timesheetRouter.post("/", getParams, (req, res, next) => {
    const tsData = req.body.timesheet;
    console.log("ID", req.empID);
    db.run(`insert into Timesheet (hours, rate, date, employee_id) 
        values ($hours, $rate, $date, $emp);`, {
        $hours: tsData.hours,
        $rate: tsData.rate,
        $date: tsData.date,
        $emp: req.empID
    }, function(err) {
        if (err) {
            return res.status(404).send(err);
        } else {
            db.get("select * from Timesheet where id = $id", {$id: this.lastID},
                (err, row) => {
                    return res.status(201).send({timesheet: row});
                });
        }
    });
});

Код создания таблицы:

db.serialize(() => {
    db.run("DROP TABLE IF EXISTS Timesheet", err => {
        if (err) {
            throw new Error(err);
        }
    });
    db.run(`create table Timesheet (id integer PRIMARY KEY,
        hours integer NOT NULL,
        rate integer NOT NULL,
        date integer NOT NULL,
        employee_id integer NOT NULL, FOREIGN KEY (employee_id) REFERENCES Employee (id))`,
    err => {
        if (err) {
            throw new Error(err);
        }
    });
});

Примечание. GetParams - это функция для определения значения empID.

1 Ответ

0 голосов
/ 31 октября 2018

В настоящее время в SQLite версии 3.25.2 ограничения внешнего ключа по умолчанию отключены . Вам нужно включить их

sqlite> PRAGMA foreign_keys = ON;

Или, в вашем случае

db.get("PRAGMA foreign_keys = ON")

Я предполагаю.

Он работает для каждого соединения, DB Browser, вероятно, автоматически устанавливает его при запуске, поэтому в этом случае выдает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...