使用Sequelize和SQLite无需自动递增即可获取新条目的ID

时间:2018-09-12 09:05:10

标签: node.js sqlite sequelize.js

我想将Node.js与Sequelize和SQLite一起使用。我为用户提供了以下模型:

const User = sequelize.define('user', {
  rowid: {
    type: 'INTEGER',
    primaryKey: true,
  },
  // other properties
});

如果我现在执行const newUser = await User.create({ /* properties */ }),我希望能够使用newUser.rowid访问新用户的ID。但是,只有当我在规范中添加autoIncrement: true时,情况并非如此。在https://www.sqlite.org/autoinc.html之后,我不想这样做。还有其他可能性吗?

编辑

事实证明,这只能通过创建不带有autoIncrement: true的表并将其添加到列定义中来实现。更实用的方法可能只是使用自动增量,对于大多数小型应用程序,性能下降并不重要。

1 个答案:

答案 0 :(得分:1)

您不必使用autoincrement来访问表rowid中的User。我希望以这种方式User.rowid而不是示例中的newUser.rowid来看到它,因为表名(显然)是User

也来自sqlite文档:

  

如果rowid表的主键由单个列组成   并且该列的声明类型为“ INTEGER”,混合形式为   大小写,则该列将成为rowid的别名。   这样的列通常称为“整数主键”。一种   如果声明了PRIMARY KEY列,则仅成为整数主键   类型名称恰好是“ INTEGER”。

最后,您可能会为PK考虑一个与rowid不同的名称,因为sqlite已经有了一个rowid

  

除WITHOUT ROWID表外,SQLite表中的所有行都有一个   64位带符号整数密钥,可唯一标识其内的行   表。该整数通常称为“ rowid”。 rowid值可以   使用不区分大小写的特殊名称之一“ rowid”进行访问,   “ oid”或“ rowid ”代替列名。如果一个表包含一个   用户定义的名为“ rowid”,“ oid”或“ rowid ”的列,然后使用该名称   总是引用显式声明的列,不能用来   检索整数rowid值。