gorm 批量插入数据
使用gorm 插入数据的时候,根据官方文档可以使用Create
或者FirstOrCreate()
. 但是官方没有提供批量插入数据的方法.
根据github
的 issue得知,我们可以通过自己拼接sql
语句进行批量数据插入(或许这是官方提供方法之前最好的解决方案了)具体实现如下:
假设有如下数据库表结构:
CREATE TABLE `employees` (
`id` int(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(64) NOT NULL COMMENT '雇员姓名',
`age` TINYINT(5) NOT NULL COMMENT '雇员年龄',
`addr` varchar(64) NOT NULL COMMENT '雇员家庭地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='雇员信息表';
批量操作如下:
// Employee ...
type Employee struct {
Name string `gorm:"column:name"`
Age int `gorm:"column:age"`
Addr string `gorm:"column:addr"`
}
// BatchSave 批量插入数据
func BatchSave(db *gorm.DB, emps []*Employee) error {
var buffer bytes.Buffer
sql := "insert into `employees` (`name`,`age`,`addr`) values"
if _, err := buffer.WriteString(sql); err != nil {
return err
}
for i, e := range emps {
if i == len(emps)-1 {
buffer.WriteString(fmt.Sprintf("('%s','%d',%s);", e.Name, e.Age, e.Addr))
} else {
buffer.WriteString(fmt.Sprintf("('%s','%d',%s),", e.Name, e.Age, e.Addr))
}
}
return db.Exec(buffer.String()).Error
}
后续考虑分装一下BatchCreate
方法
gorm 批量插入数据的更多相关文章
- C#批量插入数据到Sqlserver中的四种方式
我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...
- .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库
批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...
- sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )
通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下. 其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...
- Java 批量插入数据(Oracle)
//批量添加20000条数据用时8秒. try { String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SI ...
- 批量插入数据(基于Mybatis的实现-Oracle)
前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能. 项目DB框架:Mybatis.DataBase:Oracle. -------------------------------- ...
- C#批量插入数据到Sqlserver中的三种方式
本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生 成 ...
- SqlServer——批量插入数据
像Major表里面批量插入数据演示: 代码如下: Declare @I int Set @I= Begin Tran InsertData: Insert into Major values(@I,' ...
- mybatis批量插入数据到oracle
mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“ 错误解决方法 oracle批量插入使用 insert a ...
- SQLServer 批量插入数据的两种方法
SQLServer 批量插入数据的两种方法-发布:dxy 字体:[增加 减小] 类型:转载 在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Ins ...
随机推荐
- Redis存储List
list中数据可以重复,查询快,增删慢. 存储结构: 1.向List存取数据: 查询list中的全部元素: 第一个进入a,第二个进入b,并将a向后移一位. 上图为从右边插入元素的情况. 2.从两头取出 ...
- Xamarin 自定义OnKeyDown 再按一次退出程序的实现
private DateTime? lastBackKeyDownTime; public override bool OnKeyDown(Keycode keyCode, KeyEvent e) { ...
- tensorflow手写数字识别(有注释)
import tensorflow as tf import numpy as np # const = tf.constant(2.0, name='const') # b = tf.placeho ...
- 配置nRF52832 的NFC 专用引脚为 GPIO
nRF52832 是支持NFC的,真可惜本码农没用过. NFC的引脚为 P0.09/P0.10,这两个引脚正常情况下是不能直接当做GPIO来用的,要用的时候,需要在编译环境配置一个宏. 下面是Keil ...
- 全面解读Group Normalization,对比BN,LN,IN
前言 Face book AI research(FAIR)吴育昕-何恺明联合推出重磅新作Group Normalization(GN),提出使用Group Normalization 替代深度学习里 ...
- python的tecplot模块(tecplot新特性)
Python的tecplot模块仅支持tecplot2017以上 首先安装tecplot2017 安装完成以后,安装python的tecplot模块 可以通过终端转入tecplot安装目录下的pyte ...
- HBase(一) —— 基本概念及使用
一.安装&启动 下载 https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.1.8/ 快速开始文档,HBase2.1.8 http://hba ...
- Hive(一)—— 启动与基本使用
一.基本概念 Hive用于解决海量结构化日志的数据统计问题. Hive是基于Hadoop的一个数据仓库工具.本质是将HQL(Hive的查询语言)转化成MapReduce程序. HIve处理的数据存储在 ...
- 刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World
目录 刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World 一.前言 二.正文 1.解题过程 2.解题方法 刷题记录:[CISCN2019 华北赛区 Day2 Web1] ...
- 【软工实践】Alpha冲刺(5/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 任务界面设计,任务功能后端实现 任务计时功能及界面实现 展示GitHub代码签 ...