我有一个模型如下:
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”(给出十进制),它完美存储没有错误。由于我没有使用Integer作为模型中的评级类型,为什么它仍然期望整数?
您更新了Sequelize模型,但是您是否更新了数据库表本身?
使用sequelize.sync()
只会创建缺少的表。它不会更新现有的。使用sequelize.sync({force: true})
将删除所有表并重新创建它们,这意味着您的字段将实际上是一个浮点数,但您将丢失数据库中存在的所有数据。
您可以使用以下alter语句更新数据库中的字段,而不会丢失数据:
ALTER TABLE MessageRating ALTER COLUMN rating TYPE float;
了解更多关于ALTER TABLE的信息。
一个有用的提示:Sequelize传播来自数据库的错误,因为SequelizeDatabaseError
错误。当您看到来自代码的此类错误时,您可以确定错误来自数据库而不是自身的续集。