每次我的应用程序重新启动时,Sequelize会删除数据库中的所有表并再次定义它们(包括数据),这很麻烦。 有没有什么方法可以只将架构更改应用于数据库,如果没有更改则不执行任何操作?
答案 0 :(得分:0)
使用sequelize.sync({logging:console.log});.它首先检查表是否存在,如果不存在则创建表。
答案 1 :(得分:0)
我已经在使用它了。这是我的代码:
db
.sequelize
.sync({ force: false })
.complete(function(err) {
if (err) {
throw err[0];
} else {
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
}
});
和表格代码如下: -
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
username: DataTypes.STRING,
});
return User;
};
IT第一次工作,但是让我们说在一段时间之后我需要在users表中再添一个列让我们说名字。 然后我这样做了: -
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
username: DataTypes.STRING,
firstname: DataTypes.STRING
});
return User;
};
然后我重新启动服务器,但这次没有在数据库中发生.... 如果我设置force属性:true 然后创建新列,但这次所有数据都丢失了。
答案 2 :(得分:0)
Set logging option to true:
sequelize.sync({logging:true}).then(function () {
console.log("CONNECTION ESTABLISHED SUCCESSFULLY");
}).catch(function () {
console.log("CONNECTION REFUSED");
})
or else you can set the 'force' property to 'false' so that it will not create the table if it is already exists.
sequelize.sync({ force: false}).then(function () {
console.log("CONNECTION ESTABLISHED SUCCESSFULLY");
}).catch(function () {
console.log("CONNECTION REFUSED");
})
答案 3 :(得分:0)
尝试一下:
const db = new Sequelize('db_name', 'username', 'pwd', {
dialect: 'sqlite',
storage: 'database.sqlite' // <----- this is important to mention, if you want to store your data on file.
});
如果不提供存储位置,则默认情况下它将在内存中存储数据,并且每次重新启动服务器时,数据都会丢失。