我的问题有点抽象,但我希望不要太多。
我正在建立一个使用Sequelize作为ORM的项目。它已经在生产中,这意味着我数据库中的数据无法删除。由于我们仍在开发中,因此有时需要更改数据库(更改列,添加列,删除列)。
在项目中,我正在使用sequelize.sync()
。强制执行数据库更改的唯一选项是使用sequelize.sync({force: true})
,但是此命令将从数据库中删除所有数据。
据我了解,我需要使用迁移。不幸的是,我已经阅读了文档并浏览了Stack Overflow,但仍然找不到有关如何进行迁移和保留数据的适当指南。
假设我有一个模型,User
:
module.exports = (sequelize, DataTypes) => {
var Users = sequelize.define('user', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true
},
username: {
type: DataTypes.STRING(20),
unique: {
msg: 'A person with the same username already exists!'
},
allowNull: false
},
password: {
type: DataTypes.STRING(100),
allowNull: false
},
phone: {
type: DataTypes.STRING(50),
allowNull: true,
unique: {
msg: 'A user with the same phone number already exists!'
}
}
});
Users.associate = function (models) {
models.user.User_roles = models.user.belongsTo(models.user_role, {foreignKey: 'role'});
models.user.Site_access = models.user.hasMany(models.site_access, {
as: 'site_access',
onDelete: "CASCADE",
foreignKey: {
allowNull: false
}
});
};
return Users;
};
说我想添加一列birthday TIMESTAMP
而不擦除所有现有数据,该怎么做?
答案 0 :(得分:1)
在User
表中添加列并使用alter
sequelize.sync({
force: false,
alter: true
})
alter
为true只会更新新列或已删除列,而不会删除数据。
答案 1 :(得分:0)
您也可以使用Sequelize CLI代替模型同步。这样一来,您还可以使用回滚,种子和模型来创建更复杂的迁移。