2015-09-28 57 views
2

我在数据库中有一个表,现在我想向它添加两个新列。 我已经使用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        
}); 

在表obv_raobv_decThis is how the datable looks in the Database

这里已加..!

这是插入查询:

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的情况下解决这个问题吗?

+0

使用[sync](http://docs.sequelizejs.com/en/latest/docs/schema/#syncing) - 可能有帮助。也许Model和db有区别 - 你会用'sync'来看它。在使用它之前要小心并备份数据库,因为'force'会使表格丢失。 –

+0

如果我设置'force:false',反正有这个可以在不丢表的情况下完成 – Abhishek

+0

@AndreyPopov请看我的编辑 – Abhishek

回答

0

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

你也可以在创建之前做一些花哨的逻辑,以检查磁盘上的表的模式与你期望它来自模型的内容以及适当的添加/删除列,但在那一点上,你只是重新实现不太灵活的版本Migrations。除非有令人信服的理由,否则您应该使用Migrations