gpt4 book ai didi

javascript - 尽管将字段类型设置为 Float,但仍然需要 Integer 进行 Sequelize

转载 作者:行者123 更新时间:2023-12-02 23:52:15 24 4
gpt4 key购买 nike

我有一个模型如下:

const Sequelize = require("sequelize");
const sequelize = new Sequelize({
database: process.env.PGDATABASE,
username: process.env.PGUSER,
password: process.env.PGPASS,
host: process.env.PGHOST,
port: process.env.PGPORT,
dialect: "postgres"
});

var MessageRating = sequelize.define(
"MessageRating",
{
chatId: {
type: Sequelize.STRING,
primaryKey: true,
allowNull: false
},
ratingType: {
type: Sequelize.ENUM,
values: ["NEGATIVE", "POSITIVE", "NEUTRAL", "MIXED"],
allowNull: false
},
rating: {
type: Sequelize.FLOAT,
allowNull: false
}
},
{
indexes: [
{
unique: false,
fields: ["ratingType"]
}
]
}
);

module.exports = MessageRating;

我正在尝试使用以下代码使用此模型创建一个表:

 var messageRatingStored = sequelize
.sync()
.then(() =>
MessageRating.create({
chatId: chatId,
ratingType: amazonComprehendResult.ResultList[0].Sentiment,
rating: roundOffRating
})
)
.then(messageRating => {
console.log("MessageRating json", messageRating.toJSON());
});

每当我运行代码时,它都会抛出错误:“未处理的拒绝 SequelizeDatabaseError:整数的输入语法无效:“0.82””

https://gist.github.com/BikalNepal/51fd28f877b422fcc16825d61cd95847

我尝试使用静态整数值(82、10 等)而不是“roundOffRating”(给出小数),并且它存储完美,没有错误。由于我没有使用整数作为模型中的评级类型,为什么它仍然需要整数?

最佳答案

您更新了 Sequelize 模型,但更新了数据库表本身吗?

使用sequelize.sync()只会创建丢失的表。它不会更新现有的。使用sequelize.sync({force: true})将删除所有表并重新创建它们,这意味着您的字段实际上将是一个 float ,但您将丢失数据库中存在的所有数据。

您可以使用以下 alter 语句更新数据库中的字段,而不会丢失数据:

ALTER TABLE MessageRating ALTER COLUMN rating TYPE float;

了解更多关于ALTER TABLE的信息.

有用的提示:Sequelize 将数据库中的错误作为 SequelizeDatabaseError 错误传播。当您看到代码中出现此类错误时,您可以确定该错误来自数据库,而不是自行发生。

关于javascript - 尽管将字段类型设置为 Float,但仍然需要 Integer 进行 Sequelize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55588780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com