如何在Sequelize迁移脚本中向表中添加数据? 这就是我得到的:
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()
}
}
答案 0 :(得分:16)
我明白了。 Sequelize可从 migration.migrator.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();
})
}
答案 1 :(得分:12)
在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();
});
答案 2 :(得分:4)
实际上,运行查询并不是一个好主意。 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, {});
}
};
这将返回sequelize-cli预期的承诺。
答案 3 :(得分:0)
在sequelize版本4.41.2中,当您使用ES6 +并希望在迁移过程中进行更复杂的插入时,可以使up
为异步函数,
创建表,然后将必要的数据插入表中。为了确保迁移成功或失败而没有进行任何更改,每个事务都要使用一个事务
与续集的互动。要注意的另一件事是up
必须返回一个Promise。
创建表的示例->从其他表中获取数据->修改获取的数据->将修改后的数据插入到新表中:
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'),
};