Sequelize 提供了一个方法 Model.bulkCreate,可以只用一次查询插入多条数据。
bulkCreate(records, [options]) -> Promise.<Array.<Instance>>
参数
records Array 要创建实例的对象(键/值 对)列表 [options] Object [options.fields] Array 要插入的字段。默认全部 [options.validate=true] Boolean 插入每条记录前进行验证 [options.hooks=true] Boolean 在执行前/后创建钩子 [options.individualHooks=false] Boolean 在执行前/后为每个实例创建钩子 [options.ignoreDuplicates=false] Boolean 忽略重复主键(Postgres不支持) [options.updateOnDuplicate] Array 如果行键已存在是否更新(mysql & mariadb支持). 默认为更新 [options.transaction] Transaction 在事务中执行查询
例子
const captains = await Captain.bulkCreate([ { name: 'Jack Sparrow' }, { name: 'Davy Jones' } ]); console.log(captains.length); // 2 console.log(captains[0] instanceof Captain); // true console.log(captains[0].name); // 'Jack Sparrow' console.log(captains[0].id); // 1 // (or another auto-generated value)
插入时数据验证
const Foo = sequelize.define('foo', { bar: { type: DataTypes.TEXT, validate: { len: [4, 6] } } }); // 不会抛出异常,数据也会被插入 await Foo.bulkCreate([ { name: 'abc123' }, { name: 'name too long' } ]); // 抛出异常,数据也不会被插入 await Foo.bulkCreate([ { name: 'abc123' }, { name: 'name too long' } ], { validate: true });
参考:
https://sequelize.org/master/manual/model-querying-basics.html#creating-in-bulk
声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。