使用 Sequelize 操作 PostgreSQL 数据库出现 “SequelizeDatabaseError: column "createdAt" does not exist” 错误,如何解决?

在使用 Sequelize 操作 PostgreSQL 数据库的过程中,有些开发者可能会遇到 “SequelizeDatabaseError: column "createdAt" does not exist” 错误。在这篇文章中,我们将探讨这个错误的原因以及如何解决它。

什么是 Sequelize?

Sequelize 是一个用于 Node.js 的 ORM(对象关系映射)库,它支持多种数据库,包括 PostgreSQL、MySQL、SQLite、MSSQL 等。使用 Sequelize,开发者可以通过 JavaScript 代码操作数据库,而无需编写 SQL 语句。

在 Sequelize 中,每一个数据模型都对应着数据库中的一张表。 每个数据模型都定义了需要进行的操作,定义包括字段名称,数据类型,以及字段间的关系。

问题描述

在使用 Sequelize 操作 PostgreSQL 数据库时,有些开发者可能会遇到以下错误:

这个错误通常出现在创建一个新的数据表时。下面是一个在 Sequelize 中创建数据表时可能会遇到此问题的示例代码:

在执行上述代码时,由于我们没有为数据表创建一个 createdAt 字段,所以 Sequelize 就会抛出上述错误。

问题原因

在 Sequelize 中,每一个数据模型都继承一个名为 Model 的类。这个类中定义了一些默认字段,比如 createdAtupdatedAtId。如果你没有在你的模型中定义这些字段,Sequelize 就会尝试查找这些默认字段,并在创建记录时使用它们。如果这些默认的字段在数据库中不存在,就会出现上述错误。

解决方案

要解决上述错误,我们需要在 Sequelize 中创建一个名为 createdAt 的字段。要实现这个目标,可以使用以下两种方式之一。

方案一:手动添加字段

首先,我们需要在我们的数据模型中添加一个名为 createdAt 的字段。例如:

在这个代码示例中,我们手动添加了一个名为 createdAt 的字段,并指定了该字段的数据类型。除此之外,我们还为该字段设置了几个选项,例如允许 Null、使用 NOW() 作为默认值等。

方案二:使用 timestamps 选项

Sequelize 提供了一个默认的选项,可以自动为数据表添加 createdAtupdatedAt 字段,这个选项名为 timestamps。要使用这个选项,我们只需要将它设置为 true。例如:

在这个代码示例中,我们将 timestamps 选项设置为 true,这将自动为数据表添加 createdAtupdatedAt 两个字段。

总结

在本文中,我们讨论了使用 Sequelize 操作 PostgreSQL 数据库时出现 “SequelizeDatabaseError: column "createdAt" does not exist” 错误的原因以及如何解决这个错误。我们介绍了手动添加 createdAt 字段和使用 timestamps 选项这两种解决方案,并提供了代码示例。为了获得最佳结果,请结合你的具体情况选择最佳方案。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652eb35c7d4982a6ebfc557a


纠错
反馈