2015-09-28 20 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