You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sequelize模型中定义根据其他字段自动计算的生成列?

Sequelize模型配置MySQL条件生成列方案

你可以直接在Sequelize模型的PROFIT字段定义中通过内置属性配置生成列,无需手动执行SQL修改表结构,修改后的完整模型代码如下:

Gsdatatab.init({
    SCRIP: {
      type: DataTypes.STRING,
      unique: true,
    },
    LTP: DataTypes.FLOAT,
    OHL: DataTypes.STRING,
    ALERT: DataTypes.FLOAT,
    PROFIT: {
      type: DataTypes.FLOAT,
      // 指定生成列类型为VIRTUAL,可选值还有STORED(持久化存储到磁盘)
      generated: 'VIRTUAL',
      // 用sequelize.literal包裹原生SQL计算逻辑
      defaultValue: sequelize.literal('(CASE WHEN `OHL` = "B" THEN `LTP` - `ALERT` WHEN `OHL` = "S" THEN `ALERT` - `LTP` END)')
    }
 }, {
    sequelize,
    modelName: 'Gsdatatab',
    timestamps: true,
  });
  return Gsdatatab;
};

低版本Sequelize兼容方案

如果你使用的Sequelize版本低于6.x,不支持generated属性,可以直接通过columnType属性声明完整的列定义:

PROFIT: {
  type: DataTypes.FLOAT,
  columnType: 'FLOAT GENERATED ALWAYS AS (CASE WHEN `OHL` = "B" THEN `LTP` - `ALERT` WHEN `OHL` = "S" THEN `ALERT` - `LTP` END) VIRTUAL'
}

注意事项

  • 生成列由MySQL自动维护,业务代码中插入、更新数据时不需要为PROFIT字段赋值,所有针对该字段的手动赋值都会被数据库自动忽略
  • 调用sync()方法同步表结构时,Sequelize会自动生成对应的表结构修改语句,无需手动执行SQL

内容的提问来源于stack exchange,提问作者Siba Swain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:45:03