Добавить данные в Sequelize migration script?
Как добавить данные в таблицу в миграции Sequelize script?
Это то, что я получил:
module.exports = {
up: function(migration, DataTypes, done) {
migration.createTable(
'person',
{
name: DataTypes.STRING,
age: DataTypes.INTEGER
},
{
charset: 'latin1' // default: null
}
);
// I want to insert person and age.
migration.insert(???);
done()
},
down: function(migration, DataTypes, done) {
migration.dropTable('queue');
done()
}
}
Ответы
Ответ 1
Я понял это. Sequelize доступен из mig.mrrator.sequelize. Можно сделать что-то вроде этого:
up: function (migration, DataTypes, done) {
migration.createTable(
'Person',
{
name: DataTypes.STRING,
age: DataTypes.INTEGER,
}
).success(function () {
migration.migrator.sequelize.query("insert into person (name, age) values ('Donald Duck', 60)");
done();
});
},
down: function (migration, DataTypes, done) {
migration.dropTable(
'Person'
).then(function() {
done();
})
}
Ответ 2
В последней версии sequelize это изменилось, и теперь оно должно быть
migration.createTable(
'Person',
{
name: DataTypes.STRING,
age: DataTypes.INTEGER,
}
).then(function () {
migration.sequelize.query("insert into person (name, age) values ('Donald Duck', 60)");
done();
});
Ответ 3
На самом деле не рекомендуется просто запускать запрос. queryInterface теперь имеет функции create() и bulkCreate().
'use strict';
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.bulkInsert('roles', [{
label: 'user',
createdAt: new Date(),
updatedAt: new Date()
}, {
label: 'admin',
createdAt: new Date(),
updatedAt: new Date()
}]);
},
down: function(queryInterface, Sequelize) {
return queryInterface.bulkDelete('roles', null, {});
}
};
Это возвращает обещание, как ожидалось, от sseelize-cli.
Источник (адаптирован): https://github.com/sequelize/sequelize/issues/3210
Ответ 4
В sequelize версии 4.41.2, при использовании ES6+, и вы хотите сделать более сложные вставки внутри миграции можно сделать up
функции асинхронной, которая создает таблицу, а затем вставляет необходимые данные в таблицу. Чтобы гарантировать, что миграция либо завершится успешно, либо завершится неудачей без внесения каких-либо изменений, транзакция используется для каждого взаимодействия с sequelize. Еще одна важная вещь, которую стоит отметить, это то, что up
должен вернуть обещание.
Пример создания таблицы → выборка данных из другой таблицы → изменение извлеченных данных → вставка измененных данных в новую таблицу:
module.exports = {
up: (queryInterface, Sequelize) => queryInterface.sequelize.transaction(async (transaction) => {
await queryInterface.createTable('person', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER,
},
name: {
type: Sequelize.STRING,
},
age: {
type: Sequelize.STRING,
},
}, { transaction });
// Returns array [[results], { /** result obj */ }]
const [dogs] = await queryInterface.sequelize.query('SELECT * FROM public."Dogs";', { transaction });
// prepare data
const metamorphed = dogs.map(({ name, age }) => ({
name,
age: parseInt((age * 7), 10),
}));
return queryInterface.bulkInsert('person', metamorphed, { transaction });
}),
down: queryInterface => queryInterface.dropTable('person'),
};