【问题标题】:Sequelize: how to let the database handle primary key value?Sequelize:如何让数据库处理主键值?
【发布时间】:2021-03-11 03:08:32
【问题描述】:

我正在使用 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) 如何在创建时处理主键?

【问题讨论】:

    标签: node.js postgresql sequelize.js


    【解决方案1】:

    我认为您可以完全跳过定义中的id 字段,PostgreSQL 仍然会有一个

    【讨论】:

    • 我确实想到了,但我仍然想在查询时检索 id,并且我想在 INSERT-ing 时获取新生成的 id。
    • 这两个都是可能的——你在从create返回的其他字段中获取id,查询时可以访问id
    • 是和不是。 Sequelize 会自动生成一个名为 id 的字段,它会自动将其视为自动递增的整数 primaryKey,这与我在真实表中的 uuid pk 不一致。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多