【问题标题】:adding new column to the existing table in sequelize在 sequelize 中向现有表中添加新列
【发布时间】:2015-12-25 07:47:50
【问题描述】:

我在数据库中有一个表,现在我想向其中添加两个新列。 我使用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_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 的情况下解决这个问题?

【问题讨论】:

  • 使用sync - 可能会有所帮助。也许 Model 和 db 之间有区别——你会用sync 看到它。使用前请小心并备份数据库,因为force 会删除表。
  • 如果我设置 force:false 怎么办,无论如何这可以在不丢表的情况下完成
  • @AndreyPopov 请看我的编辑

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


【解决方案1】:

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

您还可以在创建之前执行一些奇特的逻辑来检查磁盘上表的架构与您期望它来自模型的架构并酌情添加/删除列,但此时您只是重新实现一个Migrations 的不太灵活的版本。除非有令人信服的理由不这样做,否则您应该使用 Migrations

【讨论】:

    猜你喜欢
    • 2018-08-14
    • 2013-05-23
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2016-07-07
    • 2021-05-13
    相关资源
    最近更新 更多