Sequelize期待整数,尽管将该领域的类型设为Float

问题描述 投票:0回答:1

我有一个模型如下:

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作为模型中的评级类型,为什么它仍然期望整数?

javascript postgresql sequelize.js
1个回答
1
投票

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

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

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

ALTER TABLE MessageRating ALTER COLUMN rating TYPE float;

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

一个有用的提示:Sequelize传播来自数据库的错误,因为SequelizeDatabaseError错误。当您看到来自代码的此类错误时,您可以确定错误来自数据库而不是自身的续集。

© www.soinside.com 2019 - 2024. All rights reserved.