同步迁移并在电子应用程序中重新创建表

时间:2019-04-30 17:20:32

标签: sequelize.js sequelize-typescript umzug

我已经阅读并测试了通过sequelize-cli进行的Sequelize迁移,并使用unzug库以编程方式进行了迁移。 我想做一些复杂的任务,稍后再解释。在此之前,我想确保我对sequelize文档的理解正确与否。

Creating-first-model--and-migration model:generate命令生成模型文件和迁移文件。

如果使用sequelize-cli,则需要通过执行命令db:migrate创建表。

在我的角电子应用中,第一个新的Sequelize如下:

this.sequelize = new Sequelize(this.dbName, null, null, {
      dialect: 'sqlite',
      storage: storage,
      operatorsAliases: false
    });

//Define table model
 this.userModel = this.sequelize.define('users', {
  name: { type: Sequelize.STRING, allowNull: false },
});

// Use sync to create table
 this.sequelize.sync();

上面的代码没有问题。 这是我的第一个问题:但是,如果我要使用模型文件夹(user.js等)中的模型文件,如何从我的打字稿代码访问?然后调用this.sequelize.sync()?

我知道我可以使用umzug库并将其用于迁移文件夹下所有文件的迁移,从而为user.js等创建表。

我问的原因是

  1. 我想使用版本来控制数据库表的创建和迁移。

  2. 在android中,数据库具有版本的概念,如果尚未创建数据库,则它将创建具有最新架构的所有表,并且不会进行每次迁移。

  3. 根据版本,我可以控制从哪个版本开始运行迁移文件。

  4. 如果由于任何原因迁移失败(实际上不应发生),那么我可以强制其删除表并使用最新模式再次创建表。在这种情况下,即使数据消失了,应用程序也不会失败。

使用umzug

  1. 尽管我可以提供一系列要做的迁移任务

umzug.up(['20141101203500-task','20141101203501-task-2']);

但是我无法检查哪些任务已经执行。 umzug.pending()无法检查我提供的列表,它返回带有所有剩余未决迁移的migrations数组,而不是从提供的任务数组返回。如果umzug.up([task-list])包括已执行的迁移,它将抛出错误,其余迁移文件将不会运行。 还有其他解决方法吗?

  1. 在umzug文档中,可以像这样忽略正确的顺序运行特定迁移:

umzug.up({ migrations: ['20141101203500-task', '20141101203501-task-2'] });

因此,通过提供数组列表,不能在数组中按顺序执行这些任务吗? umzug.up()是否并行执行任务?

0 个答案:

没有答案