Sequelize миграции и воссоздать таблицы в электронном приложении - PullRequest
0 голосов
/ 30 апреля 2019

Я прочитал и протестировал миграцию Sequelize через sequelize-cli, а также библиотеку unzug для программной миграции. Я хочу сделать несколько сложных задач, и я объясню позже. Перед этим я хочу убедиться, что мое понимание документации sequelize является правильным или нет.

Создание-первая-модель-и-миграция модель: команда создания генерирует файл модели и файл миграции.

Если вы используете 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 () не может проверить список, который я предоставил, он возвращает массив миграций со всеми остальными отложенными миграциями, а не из предоставленного массива задач. Если umzug.up ([список задач]) включает в себя уже выполненную миграцию, он выдаст ошибку, а остальные файлы миграции не будут запущены. Есть ли другой способ решить это?

  1. В документации umzug Запуск определенных миграций при игнорировании правильного порядка можно сделать так:

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

Таким образом, предоставляя список массивов, нельзя ли выполнять эти задачи по порядку в массиве? Umzug.up () выполняет задачи параллельно?

...