Подтвердить что ты не робот

Как работает autoIncrement в Sequelize NodeJs?

В документе Sequelize не сказано много о autoIncrement. Он включает только следующий пример:

// autoIncrement can be used to create auto_incrementing integer columns
incrementMe: { type: Sequelize.INTEGER, autoIncrement: true }

Исходя из этого примера, у меня есть следующий код:

db.define('Entries', {
    id: {
        type: Seq.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    title: {
        type: Seq.STRING,
        allowNull: false
    },
    entry: {
        type: Seq.TEXT,
        allowNull: false
    }
}

Теперь, когда я хочу создать запись, я хочу сделать что-то вроде этого:

models.Entry.create({title:'first entry', entry:'yada yada yada'})

Однако, когда я выполняю этот код, я получаю ошибку базы данных:

Значение Null в столбце "id" нарушает не нулевое ограничение

Я бы предположил, что Sequelize поместит для меня целое число или определит таблицу базы данных, чтобы сделать это сам. Очевидно нет? Что мне здесь не хватает, чтобы убедиться, что идентификатор автоматически увеличивается и заполняется?

Большое спасибо.

4b9b3361

Ответ 1

Обычно Sequelize.js адаптируется к базе данных. Таким образом, атрибут autoincrement соответствует серийному типу в PostgreSQL.

Я уже работал с Sequelize и помню, что вам не нужно указывать id как первичный ключ. Sequelize сделает это за вас.

Попробуйте не добавлять атрибут id и посмотреть, не добавит ли Sequelize его для вас или нет.

Ответ 2

omitNull параметр конфигурации по умолчанию - false. Установите его в true, а id позаботится Postgres:

sequelize = new Sequelize('mydb', 'postgres', null, {
  host: 'localhost',
  port: 5432,
  dialect: 'postgres',
  omitNull: true
})

Visitor = sequelize.define('visitor', {
  email: Sequelize.STRING
})

Visitor.create({email: '[email protected]'})

Ответ 3

Это сработало для меня, если бы я добавил вручную поле "id" (в этом случае Sequelize не будет добавлять его автоматически) в модели следующим образом:

Visitor = sequelize.define('visitor', {
  id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
  },
  email: Sequelize.STRING
})

result Команда SQL: "CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ" посетитель "(" id "SERIAL," email "varchar (255)..."