我想将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
的表并将其添加到列定义中来实现。更实用的方法可能只是使用自动增量,对于大多数小型应用程序,性能下降并不重要。
答案 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值。