gpt4 book ai didi

node.js - 使用 Sequelize 和 SQLite 获取新条目的 ID,无需自动递增

转载 作者:行者123 更新时间:2023-12-03 22:27:32 26 4
gpt4 key购买 nike

我想将 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 的情况下创建表,然后才将其添加到列定义中来实现。更实用的方法可能是只使用自动增量,对于大多数小型应用程序来说,性能下降无关紧要。

最佳答案

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

同样来自 sqlite 文档:

if a rowid table has a primary key that consists of a single column and the declared type of that column is "INTEGER" in any mixture of upper and lower case, then the column becomes an alias for the rowid. Such a column is usually referred to as an "integer primary key". A PRIMARY KEY column only becomes an integer primary key if the declared type name is exactly "INTEGER".



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

Except for WITHOUT ROWID tables, all rows within SQLite tables have a 64-bit signed integer key that uniquely identifies the row within its table. This integer is usually called the "rowid". The rowid value can be accessed using one of the special case-independent names "rowid", "oid", or "rowid" in place of a column name. If a table contains a user defined column named "rowid", "oid" or "rowid", then that name always refers the explicitly declared column and cannot be used to retrieve the integer rowid value.

关于node.js - 使用 Sequelize 和 SQLite 获取新条目的 ID,无需自动递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52291419/

26 4 0
文章推荐: angularjs - 常见的 Protractor 测试场景能否实现一次?
文章推荐: jquery - 显示/隐藏