Sequelize 批量导入和批量更新数据

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

声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
真诚赞赏,手留余香
赞赏
随机推荐
WordPress 添加自定义接口
Linux netstat 命令
MySQL 的 sql_mode 模式介绍:为什么 MySQL 中 int,float,double 类型字段插入空字符时自动转为0
阿里云内容安全 API 签名机制
WordPress 常用函数 / sanitize_user
Git 放弃本地修改,强制和之前的某次提交同步
WordPress 分页
使用 MySQL 线程池对压力测试的影响