在Sequelize中向现有表添加新列

3

我在数据库中有一张表,现在我想向其中添加两列。我使用 MYSQL命令行 修改了表并将新添加的列添加到了 Sequelize 模型中。

但当我执行插入查询时,它仍然只查询先前的字段而没有添加新的列。

以下是我的数据模型:

var Observation = sequelize.define('observation_details', {
  obv_id: {
    type: Sequelize.INTEGER,
    primaryKey: true
  },
  obv_source: Sequelize.STRING,
  obv_waveband: Sequelize.INTEGER,
  prpsl_id: Sequelize.INTEGER,
  obv_ra: Sequelize.DOUBLE,              //newly added column
  obv_dec: Sequelize.DOUBLE              // newly added column
}, {
  tableName: 'observation_details',             
  timestamps: false                             
});

这是数据库中的数据表样式

在这个表中,obv_raobv_dec已经被添加了..!

这是插入查询语句:

Observation.create({
  obv_source: req.body.obvDetails[i].source,
  obv_waveband: req.body.obvDetails[i].waveband,
  prpsl_id: proposalId,
  obv_ra: req.body.obvDetails[i].ra,
  obv_dec: req.body.obvDetails[i].dec
})

在添加Sequelize.sync({force:false})之后,执行结果如下:

执行 (default): CREATE TABLE IF NOT EXISTS observation_details (obv_id INTEGER , obv_source VARCHAR(255), obv_waveband INTEGER, prpsl_id INTEGER, obv_ra DOUBLE PRECISION, obv_dec DOUBLE PRECISION, PRIMARY KEY (obv_id)) ENGINE=InnoDB;

但是实际执行的查询语句是:

执行 (default): INSERT INTO observation_details (obv_id,obv_source,obv_waveband,prpsl_id) VALUES (NULL,dgf,2,19);

是否有不使用Migrations也能解决这个问题的方法?


使用 sync - 可能有帮助。也许 Model 和 db 之间有区别,你会在 sync 中看到它。使用前要小心备份数据库,因为 force 会删除表。 - Andrey Popov
如果我设置 force:false,有没有任何方法可以在不删除表的情况下完成此操作? - Abhishek
@AndreyPopov,请查看我的编辑。 - Abhishek
1个回答

1
我想,如果你愿意丢失所有数据的话,你可以删除并重新开始。在创建之前,您还可以执行一些复杂的逻辑,检查磁盘上表的模式与从模型中期望的模式是否相符,并根据需要添加/删除列,但此时您只是重新实现了一个不太灵活的版本的迁移。除非有充分的理由不这样做,否则应使用迁移。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接