返回顶部
首页 > 资讯 > 数据库 >GORM常用的插入
  • 941
分享到

GORM常用的插入

golang数据库mysql 2023-08-25 06:08:31 941人浏览 薄情痞子
摘要

创建记录 package mainimport ("database/sql""fmt""gORM.io/driver/Mysql""Gorm.io/gorm""gorm.io/gorm/logger""log""os""time")typ

创建记录

package mainimport ("database/sql""fmt""gORM.io/driver/Mysql""Gorm.io/gorm""gorm.io/gorm/logger""log""os""time")type User struct {ID           uintName         stringEmail        *stringAge          uint8Birthday     *time.TimeMemberNumber sql.NullStringActivatedAt  sql.NullTimeCreatedAt    time.TimeUpdatedAt    time.Time}func main() {// 连接对应的数据库dsn := "root:root@tcp(192.168.193.128:3306)/grom_test?charset=utf8mb4&parseTime=True&loc=Local"newLogger := logger.New(log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer(日志输出的目标,前缀和日志包含的内容——译者注)logger.Config{SlowThreshold:             time.Second, // 慢 SQL 阈值LogLevel:                  logger.Info, // 日志级别IgnoreRecordNotFoundError: true,        // 忽略ErrRecordNotFound(记录未找到)错误Colorful:                  true,        // 使用用彩色打印},)db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger})if err != nil {panic(err)}birthday := time.Now()user := User{Name: "Jinzhu", Age: 18, Birthday: &birthday}result := db.Create(&user) // 通过数据的指针来创建// 1fmt.Println(user.ID)             // 返回插入数据的主键// fmt.Println(result.Error)        // 返回 error// 1fmt.Println(result.RowsAffected) // 返回插入记录的条数}

日志:

INSERT INTO `users` (`name`,`email`,`age`,`birthday`,`member_number`,`activated_at`,`created_at`,`updated_at`) VALUES ('Jinzhu',NULL,18,'2022-05-26 16:34:40.986',NULL,NULL,'2022-05-26 16:34:40.988','2022-05-26 16:34:40.988')

用指定的字段创建记录

创建记录并更新给出的字段

package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")// 省略表结构func main() {// 省略连接数据库代码birthday := time.Now()user := User{Name: "Jinzhu", Age: 18, Birthday: &birthday}db.Select("Name", "Age", "CreatedAt").Create(&user) // 创建记录并更新给出的字段。}

日志:

INSERT INTO `users` (`name`,`age`,`created_at`,`updated_at`) VALUES ('Jinzhu',18,'2022-05-26 16:39:00.906','2022-05-26 16:39:00.906')

创建一个记录且一同忽略传递给略去的字段值。

package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")// 省略表结构func main() {// 省略连接数据库代码birthday := time.Now()user := User{Name: "Jinzhu", Age: 18, Birthday: &birthday}db.Omit("Name", "Age", "CreatedAt").Create(&user) // 创建一个记录且一同忽略传递给略去的字段值。}

日志:

INSERT INTO `users` (`email`,`birthday`,`member_number`,`activated_at`,`updated_at`) VALUES (NULL,'2022-05-26 16:39:00.904',NULL,NULL,'2022-05-26 16:39:00.906')

创建钩子

GORM 允许用户定义的钩子有 BeforeSave, BeforeCreate, AfterSave, AfterCreate 创建记录时将调用这些钩子方法,请参考 Hooks中关于生命周期的详细信息

func (u *User) BeforeCreate(tx *gorm.DB) (err error) {  u.UUID = uuid.New()    if u.Role == "admin" {        return errors.New("invalid role")    }    return}

如果想跳过 钩子 方法,可以使用 SkipHooks 会话模式,例如:

DB.Session(&gorm.Session{SkipHooks: true}).Create(&user)DB.Session(&gorm.Session{SkipHooks: true}).Create(&users)DB.Session(&gorm.Session{SkipHooks: true}).CreateInBatches(users, 100)

批量插入

要有效地插入大量记录,请将一个 slice 传递给 Create 方法。 GORM 将生成单独一条SQL语句来插入所有数据,并回填主键的值,钩子方法也会被调用。

一次性插入

package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")// 省略表结构func main() {// 省略连接数据库代码var users = []User{{Name: "jinzhu1"}, {Name: "jinzhu2"}, {Name: "jinzhu3"}}db.Create(&users)for _, user := range users {// 5 6 7fmt.Println(user.ID)}}

日志:

INSERT INTO `users` (`name`,`email`,`age`,`birthday`,`member_number`,`activated_at`,`created_at`,`updated_at`) VALUES ('jinzhu1',NULL,0,NULL,NULL,NULL,'2022-05-26 17:09:15.298','2022-05-26 17:09:15.298'),('jinzhu2',NULL,0,NULL,NULL,NULL,'2022-05-26 17:09:15.298','2022-05-26 17:09:15.298'),('jinzhu3',NULL,0,NULL,NULL,NULL,'2022-05-26 17:09:15.298','2022-05-26 17:09:15.298')

分批插入

SQL语句的长度是有限制的;如果一次性插入的数据量过大,有可能会执行不了;可以采用分批插入;

package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")// 省略表结构func main() {// 省略连接数据库代码var users = []User{{Name: "jinzhu1"}, {Name: "jinzhu2"}, {Name: "jinzhu3"}}// 每两条插入一次db.CreateInBatches(users, 2)for _, user := range users { // 8 9 10fmt.Println(user.ID)}}

日志:

INSERT INTO `users` (`name`,`email`,`age`,`birthday`,`member_number`,`activated_at`,`created_at`,`updated_at`) VALUES ('jinzhu1',NULL,0,NULL,NULL,NULL,'2022-05-26 17:11:49.606','2022-05-26 17:11:49.606'),('jinzhu2',NULL,0,NULL,NULL,NULL,'2022-05-26 17:11:49.606','2022-05-26 17:11:49.606')INSERT INTO `users` (`name`,`email`,`age`,`birthday`,`member_number`,`activated_at`,`created_at`,`updated_at`) VALUES ('jinzhu3',NULL,0,NULL,NULL,NULL,'2022-05-26 17:11:49.608','2022-05-26 17:11:49.608')

根据 Map 创建

GORM 支持根据 map[string]interface{} 和 []map[string]interface{}{} 创建记录;
注意: 根据 map 创建记录时,association 不会被调用,且主键也不会自动填充

插入单条

package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")// 省略表结构func main() {// 省略连接数据库代码db.Model(&User{}).Create(map[string]interface{}{"Name": "jinzhu", "Age": 18,})}

日志:

INSERT INTO `users` (`age`,`name`) VALUES (18,'jinzhu')

批量插入

package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")// 省略表结构func main() {// 省略连接数据库代码db.Model(&User{}).Create([]map[string]interface{}{{"Name": "jinzhu_1", "Age": 18},{"Name": "jinzhu_2", "Age": 20},})}

日志:

INSERT INTO `users` (`age`,`name`) VALUES (18,'jinzhu_1'),(20,'jinzhu_2')

关联创建

关联创建

package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")type CreditCard struct {gorm.ModelNumber   stringUserID   uint}type User struct {ID           uintName         stringEmail        *stringAge          uint8Birthday     *time.TimeMemberNumber sql.NullStringActivatedAt  sql.NullTimeCreatedAt    time.TimeUpdatedAt    time.TimeCreditCard CreditCard}func main() {// 省略连接数据库代码db.Create(&User{Name: "jinzhu",CreditCard: CreditCard{Number: "411111111111"},})}

日志:

INSERT INTO `credit_cards` (`created_at`,`updated_at`,`deleted_at`,`number`,`user_id`) VALUES ('2022-05-26 17:21:24.763','2022-05-26 17:21:24.763',NULL,'411111111111',20) ON DUPLICATE KEY UPDATE `user_id`=VALUES(`user_id`)INSERT INTO `users` (`name`,`email`,`age`,`birthday`,`member_number`,`activated_at`,`created_at`,`updated_at`) VALUES ('jinzhu',NULL,0,NULL,NULL,NULL,'2022-05-26 17:21:24.761','2022-05-26 17:21:24.761')

跳过指定关联

package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")// 省略表结构func main() {// 省略连接数据库代码db.Omit("CreditCard").Create(&User{Name: "jinzhu"})}

日志:

INSERT INTO `users` (`name`,`email`,`age`,`birthday`,`member_number`,`activated_at`,`created_at`,`updated_at`) VALUES ('jinzhu',NULL,0,NULL,NULL,NULL,'2022-05-26 17:25:34.453','2022-05-26 17:25:34.453')

跳过所有关联

package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")// 省略表结构func main() {// 省略连接数据库代码db.Omit(clause.Associations).Create(&User{Name: "jinzhu"})}

日志:

INSERT INTO `users` (`name`,`email`,`age`,`birthday`,`member_number`,`activated_at`,`created_at`,`updated_at`) VALUES ('jinzhu',NULL,0,NULL,NULL,NULL,'2022-05-26 17:27:12.382','2022-05-26 17:27:12.382')

来源地址:https://blog.csdn.net/qq_43135259/article/details/124987453

您可能感兴趣的文档:

--结束END--

本文标题: GORM常用的插入

本文链接: https://lsjlt.com/news/380017.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • GORM常用的插入
    创建记录 package mainimport ("database/sql""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""time")typ...
    99+
    2023-08-25
    golang 数据库 mysql
  • Gorm:将数组列批量插入 ClickHouse
    Golang不知道大家是否熟悉?今天我将给大家介绍《Gorm:将数组列批量插入 ClickHouse》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家...
    99+
    2024-04-04
  • gorm 执行原生sql实现批量插入数据
    可以使用 GORM 的 DB 对象来执行原生 SQL 操作,然后结合 SQL 的 INSERT INTO 语句来实现批量插入数据。 以下是一个示例代码,假设我们有一个 users 表,包含 id、na...
    99+
    2023-09-20
    sql 数据库 mysql golang
  • mysql中常用的插入数据的语句
    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。...
    99+
    2024-04-02
  • sql 插入数据的常用方法有哪些
    这篇文章主要讲解了“sql 插入数据的常用方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“sql 插入数据的常用方法有哪些”吧!复制代码 代码如下:...
    99+
    2024-04-02
  • python中Pytest常用的插件
    目录前言1. 用例依赖2. 失败重跑3. 指定用例执行顺序4. 分布式运行5. 多重断言6. 小结前言 除了框架本身提供的功能外,Pytest还支持上百种第三方插件,良好的扩展性可以...
    99+
    2024-04-02
  • 带有嵌入式结构错误的 GORM CreateInBatches
    问题内容 我有以下结构(为了可读性而被截断) type schedule struct { id int userid ...
    99+
    2024-02-05
  • clickhouse 批量插入数据及ClickHouse常用命令详解
    目录一.安装使用Ⅰ).安装Ⅱ).配置Ⅲ).启停服务二.常用命令Ⅰ).创建表Ⅱ).创建物化视图Ⅲ).插入数据Ⅳ).查询数据Ⅴ).创建NESTED表Ⅵ).NESTED表数据查询Ⅶ).配置...
    99+
    2024-04-02
  • maven常用的插件有哪些
    这篇文章主要介绍了maven常用的插件有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。背景maven 常用的三个插件对打包有不同的作用:maven-jar-plugin:...
    99+
    2023-06-22
  • Grafana有哪些常用的插件
    Grafana广泛应用的开源监控和数据可视化工具,有许多常用的插件,包括但不限于: Graph 插件:用于创建时间序列数据的图表,...
    99+
    2024-04-02
  • clickhouse批量插入数据及ClickHouse常用命令的示例分析
    小编给大家分享一下clickhouse批量插入数据及ClickHouse常用命令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.安装使用ClickHo...
    99+
    2023-06-29
  • spring-data-mongo中数据插入异常报告
    1. 背景   在一个collection中加了唯一性约束,期望插入重复数据的时候能抛出异常,以便后续处理   默认配置   <bean id="mongoTemplat...
    99+
    2024-04-02
  • Flutter 常用插件汇总
    目录DIO网络请求框架url_launcher系统应用跳转flutter_easyrefresh上下拉刷新flutter_swiper 轮播组件catcher 异常捕获cached_...
    99+
    2024-04-02
  • sublime 3及常用插件
    1、了解Zen Coding:https://www.baidu.com/linkurl=c9YyfvWOfn0EtUrhKlZQ26ANUOD_CSqjgqqsb3lq6LQ05oy2MQs4hWEYLVTlFgHhZKLmtMPTq1x...
    99+
    2023-01-31
    插件 常用 sublime
  • VIM中常用的插件有哪些
    今天小编给大家分享一下VIM中常用的插件有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。插件安装设置这是为新用户准备的,...
    99+
    2023-06-28
  • Maven 常用插件的详细整理
    Maven 常用插件的详细整理源码分析<artifactId>maven-pmd-plugin</artifactId> ...
    99+
    2023-05-31
    maven 常用插件
  • 常用的Android Studio插件有哪些
    这篇文章主要讲解了“常用的Android Studio插件有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常用的Android Studio插件有哪些”吧!GsonFormat将 Jso...
    99+
    2023-06-04
  • C语言常见排序算法之插入排序(直接插入排序,希尔排序)
    目录前言一、直接插入排序1.1 基本思想1.2 算法思想1.3 程序实现1.4 直接插入排序的总结二、希尔排序2.1 算法思想2.2 程序实现2.3 希尔排序的特征总结前言...
    99+
    2024-04-02
  • maven三个常用的插件使用介绍
    目录背景SpringBoot 打包时排除文件Spring 打包本地依赖 jar编译时排除指定文件复制粘贴的原则总结背景 maven 常用的三个插件对打包有不同的作用: maven-j...
    99+
    2024-04-02
  • Flutter常用插件有哪些
    这篇文章将为大家详细讲解有关Flutter常用插件有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。DIO网络请求框架提起 Flutter 的网络框架,就不得不提 DIO,而且令人自豪的是 DIO 是国...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作