autoIncrement如何在NodeJs的Sequelize中工作?

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 } } 

现在,当我想创build一个条目,我想要做这样的事情:

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

但是,当我执行该代码时,我得到一个数据库错误:

列“id”中的空值违反了非null约束

我会假设Sequelize将把整数在我或定义数据库表来做到这一点本身。 显然不是? 我在这里错过了什么,以确保id自动递增和填充?

非常感谢。

通常Sequelize.js使用数据库进行自我调整。 所以autoincrement属性对应PostgreSQL中的一个串行types。

我已经与Sequelize合作过,我记得你不需要指定一个id作为主键。 Sequelize会为你做。

尝试不添加一个id属性,看看Sequelize是否不会为你添加它。

omitNullconfiguration选项默认为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: 'foo@bar.com'}) 

如果我在模型中添加manualy“id”字段(在这种情况下,Sequelize不会自动添加它),它对我有用:

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

结果SQL命令是:“CREATE TABLE IF NOT EXISTS”visitor“(”id“SERIAL,”email“varchar(255)…”

Interesting Posts