首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Create或Update在GORM中未返回更新值

在GORM中,Create和Update是用于创建和更新数据库记录的方法。但是,这两个方法在执行后并不会返回更新后的值。

GORM是一个Go语言的ORM(对象关系映射)库,它提供了一种简单且强大的方式来操作数据库。在GORM中,Create方法用于创建新的数据库记录,而Update方法用于更新已有的数据库记录。

当使用Create方法创建新的记录时,GORM会将数据插入到数据库中,并为该记录分配一个唯一的ID。但是,Create方法并不会返回插入后的记录,因此无法直接获取到插入后的值。

当使用Update方法更新已有的记录时,GORM会根据提供的条件找到匹配的记录,并将其更新为新的值。然而,Update方法也不会返回更新后的记录,而是返回一个包含受影响行数的整数。

要获取插入或更新后的记录,可以在执行Create或Update方法后,再使用Find方法或First方法查询相应的记录。这样可以确保获取到最新的数据。

在GORM中,可以使用链式调用的方式来组合多个操作,例如:

代码语言:txt
复制
var user User
db.Create(&user).First(&user)

上述代码中,首先使用Create方法插入新的记录,然后使用First方法查询该记录,并将查询结果赋值给user变量。

总结起来,Create和Update方法在GORM中用于创建和更新数据库记录,但它们并不会直接返回更新后的值。要获取更新后的值,可以在执行Create或Update方法后,再使用Find或First方法查询相应的记录。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于设置MySQLcreate_time和update_time默认和实时更新

在建库建表和同事沟通过程,有了如下的思考。...数据库创建时间类型的字段一般设置为 datetime timestamp 类型。那么,涉及到时间字段的设置时,都会对其设置默认update_time字段设置实时更新,接下来梳理其使用方式。...,create_time和update_time默认为当前时间 实时更新update_time字段 CREATE TABLE `test` ( `id` int COMMENT 'ID',...DEFAULT CHARSET=utf8; ON UPDATE now()表示更新这条数据的时候,update_time会更新成当前时间 让我们来测试一下: 首先给test表添加一条数据 INSERT...的 UPDATE test SET TEXT = "修改后测试数据" update_time字段时间已发生更新,后续如涉及到时间更新的操作,推荐此方法进行实现。

2.1K10

Gorm 实践指南

默认关闭事务 GORM 默认的数据更新、创建都在事务,如无必要,可以关闭默认的事务,获得更大的性能提升, 事务的全局性或者临时关闭,即使关闭默认事务,仍然可以通过方法 Begin, Transactions...// 注意,一旦你一个事务,使用tx作为数据库句柄 if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err !...Update、Updates 的是否相等,如果有变更,且字段没有被忽略,则返回 true func (u *User) BeforeUpdate(tx *gorm.DB) (err error)...更新时修改 这个场景常用于数据加密,解密 若要在 Before 钩子改变要更新,如果它是一个完整的更新,可以使用 Save;否则,应该使用 SetColumn ,例如: func (user...("Name", "jinzhu") 更新数据时多零问题 更新数据时,如果使用了 struct 来更新数据,默认只会更新非零字段,如果使用map更新数据,则会更新全部字段,使用 struct

2.1K20

Gorm实战,轻松掌握数据库增删改查技巧!

: true}).Create(&user) // `id`冲突时,将列更新为默认 db.Clauses(clause.OnConflict{ Columns: []clause.Column...); MySQL // 冲突时,更新除主键以外的所有列到新----》这个用的多 db.Clauses(clause.OnConflict{ UpdateAll: true, }).Create...dbname 传递给 'Where()' 来指定要在查询条件中使用的结构的哪些特定,例如: //使用struct进行搜索时,可以通过将相关字段名数据库名传递给`Where(),来指定在查询条件中使用...Model 对象字段的Update、Updates 的是否相等,如果有变更,且字段没有被忽略,则返回 true func (u *Student) BeforeUpdate(tx *gorm.DB..., 1).Updates(map[string]interface{}{"active": false}) 5.6 Update 时修改 若要在 Before 钩子改变要更新,如果它是一个完整的更新

2.3K20

学习gorm系列八:探秘gorm.Save函数

大纲如下: 概述 跟gorm.Create函数的行为不同,gorm.Save函数大体上有两个行为: 更新的数据不存在的情况下做插入操作 更新的数据存在的情况下做更新操作 数据是否存在的一个重要依据就是待更新的记录里是否存在主键字段...userid更新成默认0。...如下: UPDATE `m_test_01` SET `name`='Stone',`userid`=0 WHERE `id` = 1 划重点,待更新的模型数据只包含表的部分字段时,Save函数会把未指定的字段值更新成对应类型的默认...那为什么字段id是主键时,gorm就会根据该id进行更新呢? 原因是gorm包在实现时默认优先根据idID字段名来进行了一次匹配。...最后,如果model只包含表的部分字段,那么包含在内的字段会对应的被更新成对应类型的默认

1.1K10

Go 对象关系映射框架 GORM 使用示例

驱动:go get -u gorm.io/driver/postgres 使用说明 复制本代码,打开 GoLand 按 Ctrl + Shift + Alt + Insert 创建草稿文件 将代码粘贴到草稿文件...(255);<-;comment:数据库表名(中文)说明信息"` 24 SerialValue int `gorm:"size:32;<-;comment:流水号当前最大...// 设置连接可复用的最大时间 95 SqlDB.SetConnMaxLifetime(time.Hour) 96 printStats() 97 98 // 自动迁移给定模型为数据库表结构,创建表需要修改表结构的情况下可以启用...(&sysParam, result, "UPDATE", "Save") 250 251 // 更新单个字段 252 result = GormDB.Model(&sysParam). 253 Where...(&sysParam, result, "UPDATE", "Model", "WhereUpdate") 257 258 // 更新多个字段,使用结构体只会更新非零字段,要更新字段需要使用 Select

1.7K10

GORM CRUD 10 分钟快速上手

DeletedAt DeletedAt `gorm:"index"` } 字段后的 tag 用来定义字段 DB 的相关属性,如 primarykey 表示主键,index 表示索引,type 表示字段类型...其中 Save 方法保存记录时,如果主键 ID 非空则执行更新操作,零也会更新到 DB。如果主键 ID 为空,则执行插入操作。 增加多个 我们还可以使用 Create() 创建多项记录。..., price).Count(&c).Error return c, err } 查询记录是否存在 GORM ,可以使用 Count 方法来判断一个查询是否返回了记录。...3.更新Update更新所有字段 使用 Save 方法更新所有字段,即使是零也会更新。 // 先根据 ID 查询。 db.First(&good, 1) // 再修改。...当使用 struct 更新时,默认情况下,GORM 只会更新非零的字段。 // 注意:user 的 ID 是 111。

46630

Go开源ORM——GORM

,数据库存在该主键记录,则作为更新操作,更新数据库记录 插入记录 Create方法用法与Save类似,不同的是Create方法只能用于插入,如果对象具备主键,并且数据库已经存在该主键记录,则抛出异常...,返回true,否则返回false,所以可以用于辅助Create方法 ... if(db.NewRecord(&user)){ db.Create(&user) } 修改记录 Update和Updates...关联更新 当保存的实体类包含关联对象时,则会save该关联对象,比如下面代码,从数据库查出user对象,保存car时,因为car的关联对象owners有,关联关系和对应的user对象都被修改,名称更新为...,如下是实时设定当前操作不进行关联更新的 db.Set("gorm:save_associations", false).Create(&user) 另一种方式是定义结构体的tag里设定save_associations...`gorm:"save_associations:false"` } type Company struct { gorm.Model Name string } 关联查询 关联查询

2.1K41

Go项目重构经验分享——ORM框架实践

:"column:create_time;type:datetime" json:"create_time"` UpdateTime NullTime `gorm:"column:update_time...如果想要在插入数据时使用数据库设置的默认,需得 tag 设置 default:(-) ,如上述 SType字段,否则 gorm 会在插入时为其设置默认的零(更加具体的解释可参考这篇文章 )二是...gorm 可以声明默认的 update_time 和 create_time 字段, tag 设置 autoUpdateTime 即可,在记录创建和更新的时候,gorm 会完成这两个字段的更新。...错误;但如果使用 Find 方法查询多条数据,如果没有命中纪录,其并不会返回 ErrRecordNotFound 错误,而这一点与老项目中数据库的处理逻辑是不兼容的,因此需要特别注意更新0/非0...的字段://当通过 struct 更新时,GORM 只会更新非零字段。

47930

Gorm 数据库表迁移与表模型定义

介绍与使用 2.1 AutoMigrate介绍 AutoMigrate 是 Gorm 提供的一个功能强大的数据库迁移工具,它可以自动创建更新数据库表结构,使数据库的结构与 Golang 模型一致。...2.2 AutoMigrate 基本使用 Gorm ,你可以通过调用 db.AutoMigrate 方法来进行数据库表的自动迁移。...`gorm:"<-:create"` // allow read and create Name string `gorm:"<-:update"` // allow read and update...,则使用当前时间填充 UpdatedAt int // 创建时该字段为零或者更新时,使用当前时间戳秒数填充 Updated int64 `gorm:"autoUpdateTime...跟踪unix nano/milli秒,如: autoCreateTime:nano autoUpdateTime 创建/更新时跟踪当前时间,对于'int'字段,它将跟踪unix秒,使用'nano/'

25010

GORM V2 几个最实用的功能和升级注意事项

使用GORM的时候,如果我们想把GORM产生的日志记录到项目统一的应用日志的时,需要自己去实现GORM提供的logger 接口。...接下来说下第二个让我决定使用GORM V2 的原因 CREATE方法支持批量创建模型 GORM V1版本里,模型本身是不在带批量创建的功能的,想要批量创建一种选择是写个循环,循环里调用模型的Create...另外更新或者插入方法Upsert V2也支持批量操作。...那就在这里在补充一下吧,GORM自带的软删除我之前是不会用的,因为它那个字段名还有字段的默认都是限定不能改的,默认NULL,这在很多公司里DBA设置的约束里是不允许的。 所以我之前没有使用过。...但是现在GORM V2 支持Flag 模式了,就是咱们很多人用的0代表删除 1代表删除 使用前需要先安装GORM的soft_delete这个包。

11310

上次的问题解决啦,重新送上Go ORM 单元测试全流程讲解

从上次发文说起 在上次发布的文章《项目里怎么给 GORM 做单元测试》对 ORM 的 Update 操作的测试,因为 ORM 库每次做更新操作时,都会针对updated_at字段进行自动更新,导致我们写...Mock的时候没办法精致匹配这个字段的,这个问题也就作为一个解决的问题在文章中发布了出去。...对Create进行Mock测试 首先对 GORMCreate 方法进行Mock测试。...UPDATE 的时候会自动更新updated_at 字段为当前时间,与这里withArgs传递的 time.Now() 参数不一致(毫秒级的差距也不行)。...这种情况可以选择 Mock 要执行的更新 SQL 时给 updated_at字段的设置成sqlmock.AnyArg(),就能测试通过了,上面的 UPDATE 测试改成下面这样: mock.ExpectBegin

78740

gorm 教程 一

` ,因为主键为空db.Create(&user)db.NewRecord(user) // => `user` 之后创建返回 `false`默认你可以通过标签定义字段的默认,例如:type Animal...`gorm:"default:18"`}钩子设置字段如果你想在 BeforeCreate 函数更新字段的,应该使用 scope.SetColumn,例如:func (user *User)...是这些字段类型的空db.Model(&user).Updates(User{Name: "", Age: 0, Actived: false})更新选中的字段如果你执行更新操作时只想更新或者忽略某些字段..., 1))//// UPDATE "products" SET "quantity" = quantity - 1 WHERE "id" = '2' AND quantity > 1;钩子函数更新如果你想使用...// 更新 SQL 语句中添加额外的 SQL 选项db.Model(&user).Set("gorm:update_option", "OPTION (OPTIMIZE FOR UNKNOWN)").

22300

组件分享之后端组件——Golang的ORM组件gorm

本节我们就分享一个这样的组件gorm 它包含了如下内容: 全功能 ORM 关联 (拥有一个,拥有多个,属于,多对多,多态,单表继承) Create,Save,Update,Delete,Find 钩子方法..., "D42") // 查找 code 字段为 D42 的记录 // Update - 将 product 的 price 更新为 200 db.Model(&product).Update...("Price", 200) // Update - 更新多个字段 db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) //...仅更新非零字段 db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"}) // Delete...注: FastDevelopGo,我的初步想法是增加可视化页面、代码快速生成模块、项目框架快速生成模块等,有其他需求想法的小伙伴欢迎评论区留言直接到代码仓库中提出宝贵的issue 欢迎大家积极start

1.2K20

Golang数据库编程之GORM库入门

特性 关联 (Has One, Has Many, Belongs To, Many To Many, 多态) 钩子 (创建/保存/更新/删除/查找之前之后) 预加载 事务 复合主键 SQL 生成器...我们init方法初始化gorm.DB结构体,这样在下面的例子可以直接使用变量db直接进行数据库操作。...基本操作 使用gorm.Open()函数返回一个gorm.DB结构体后,我们可以使用gorm.DB结构体提供的方法操作数据库,下面我们演示如何使用gorm.DB进行创建、查询、更新、删除等最基本的操作。...创建 使用gorm.DBCreate()方法,GORM会根据传给Create()方法的模型,向数据表插入一行。...更新数据可以使用gorm.DB的Save()Update(),UpdateColumn(),UpdateColumns(),Updates()等方法,后面这四个方法需要与Model()方法一起使用

1.7K20

Go(五)不知道怎么用Gorm

前言 所有的后端应用都离不开数据库的操作,Go也有一些好用的数据库操作组件,例如Gorm就是一个很不错的选择。...本文也不探究Gorm和其他框架的优劣比较,而是从使用者出发,一起来探讨Gorm实际开发的使用。...,id).Update("username",username) return} 全量/多列更新(根据结构体) // UpdateByUser UPDATE `user` SET `id`=14,`user_name...匿名事务 可使用db.Transaction匿名方法来表明多个操作一个事务里面,返回err将回滚,返回nil将提交事务 func Transaction() error { db := config.GetDb...= nil { tx.Rollback() } }() // 事务执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db') if err := tx.Create(&User

1.9K11

一文入门gorm和xorm的基本操作(CRUD)

更新数据 使用Save方法 会保存所有的字段,即使字段是零 //修改 func update() { //更新单列 var user User user.Name = "迁客骚人" user.Age...='hello', updated_at='2013-11-17 21:34:10' WHERE id=111; // 根据条件和 model 的进行更新 db.Model(&user).Where...id=111 AND active=true; // 根据 `struct` 更新属性,只会更新非零的字段 db.Model(&user).Updates(User{Name: "hello"...或者xorm的一个最简单的crud的基本操作了,当然gorm和xorm的功能远不止如此,更多的特性和功能可以开发过程查阅其官网即可 gorm 和 xorm 的区别 gorm 和 xorm 都是 Go...而 xorm 社区的影响力不如 gorm,但是在某些特定领域(例如非关系型数据库)的支持度相对较好。

34350

【每周小结】2023-Week3

以下图为例,Go程序内与MySQL,数据存储是异构的 ,这就导致传统开发方式会分成两步: 将Go程序的数据转换成MySQL的 SQL 语句 解析MySQL 返回的数据到具体结构体 这部分的开发有大量重复性的代码...Go语言程序,最常见的就是gorm。...update"` // 允许读和更新 Name string `gorm:"<-"` // 允许读和写(创建和更新) Name string `gorm:"<-:false"`...我举两个反例: 字段默认有特殊的含义,如建表时status的默认设置为100 改进方案:如果100这个有业务含义,应在Go程序设置 表增加Trigger,如status字段修改为某个后,自动触发另一个字段的修改...依旧以gorm为例,在用Book结构体进行多列更新时,无法更新其中的默认,如 // 官方示例 // 代码原理:Active字段是默认false,所以不会更新 // 用户认知:因为惯性思维,往往认为这个会被设置为

50620
领券