Sequelize:如何让数据库处理主键值?



我使用sequelize 6.5.0。我创建了一个简单的模型来做两件基本的事情:a)查找记录,b)创建记录。我在创作唱片时遇到了麻烦;特别是那些有主键的。如果我将列指定为primaryKey,如下所示:

const Table = sequelize.define('table', {
id: {
type: DataTypes.UUID,
primaryKey: true
},
datum: {...}
...

并尝试创建如下记录:

Table.create({datum: 'abc'})

,它将尝试(和失败)设置主键:

INSERT INTO "table" ("id","datum") VALUES ($1,$2) RETURNING ...;

这是我没有要求它做的50%。现在,我不需要发生这种情况,因为id的默认值已经在数据库级别处理了。因此,下一个自然的步骤是而不是id指定为primaryKey:

const Table = sequelize.define('table', {
id: {
type: DataTypes.UUID,
// primaryKey: true
},
datum: {...}
...

但现在续集试图变得聪明并发脾气:

Uncaught Error: A column called 'id' was added to the attributes of 'table' but not marked with 'primaryKey: true'

Q)如何在创建时获得NOT处理主键?

我认为你可以在定义中跳过id字段,PostgreSQL仍然会有一个

为了使用DataType.UUID,您必须指定一些其他选项,如defaultValueallowNull。下面是一个例子:

const Table = sequelize.define('table', {
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4,
allowNull: false
},
datum: {...}
});

最新更新