每次重新启动应用程序时丢失数据

时间:2014-08-25 11:57:23

标签: sequelize.js

每次我的应用程序重新启动时,Sequelize会删除数据库中的所有表并再次定义它们(包括数据),这很麻烦。 有没有什么方法可以只将架构更改应用于数据库,如果没有更改则不执行任何操作?

4 个答案:

答案 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.
});

如果不提供存储位置,则默认情况下它将在内存中存储数据,并且每次重新启动服务器时,数据都会丢失。