在sequelize

时间:2015-09-28 06:15:26

标签: mysql node.js database-migration sequelize.js

我在数据库中有一个表,现在我想为它添加两个新列。 我使用MYSQL cmd line更改了表格,并将新添加的列添加到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                             
});

This is how the datable looks in the Database

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})会导致:

  

执行(默认):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;

但仍然触发的查询是:

  

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

有没有办法在不使用Migrations的情况下解决这个问题?

1 个答案:

答案 0 :(得分:0)

我想如果你愿意丢失所有数据,你可以删除并重新开始。

您还可以在创建之前执行一些奇特的逻辑,以检查磁盘上的表的架构以及您希望它来自模型的内容以及根据需要添加/删除列,但此时您只需重新实现Migrations的灵活性较低的版本。除非有令人信服的理由,否则你应该使用Migrations