golang gorm更新日志执行SQL示例详解

 更新时间:2022年04月15日 17:27:53   作者:Jeff的技术栈  
这篇文章主要为大家介绍了golang gorm更新日志执行SQL示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

1. 更新日志

1.1. v1.0

1.1.1. 破坏性变更

  • gorm.Open返回类型为*gorm.DB而不是gorm.DB
  • 更新只会更新更改的字段

大多数应用程序不会受到影响,只有当您更改回调中的更新值(如BeforeSaveBeforeUpdate)时,应该使用scope.SetColumn,例如:

func (user *User) BeforeUpdate(scope *gorm.Scope) {
  if pw, err := bcrypt.GenerateFromPassword(user.Password, 0); err == nil {
    scope.SetColumn("EncryptedPassword", pw)
    // user.EncryptedPassword = pw  // 不工作,更新时不会包括EncryptedPassword字段
  }
}

软删除的默认查询作用域只会检查deleted_at IS NULL

之前它会检查deleted_at小于0001-01-02也排除空白时间,如:

SELECT * FROM users WHERE deleted_at IS NULL OR deleted_at <= '0001-01-02'

但是没有必要,如果你使用*time.Time作为模型的DeletedAt,它已经被gorm.Model使用了,所以SQL就足够了

SELECT * FROM users WHERE deleted_at IS NULL

所以如果你使用gorm.Model,那么你是好的,没有什么需要改变,只要确保所有记录的空白时间为deleted_at设置为NULL,示例迁移脚本:

import (
    "github.com/jinzhu/now"
)
func main() {
  var models = []interface{}{&User{}, &Image{}}
  for _, model := range models {
    db.Unscoped().Model(model).Where("deleted_at < ?", now.MustParse("0001-01-02")).Update("deleted_at", gorm.Expr("NULL"))
  }
}
  • 新的ToDBName逻辑

在GORM将struct,Field的名称转换为db名称之前,只有那些来自golint的常见初始化(如HTTPURI)是特殊处理的。

所以字段HTTP的数据库名称将是http而不是h_t_t_p,但是一些其他的初始化,如SKU不在golint,它的数据库名称将是s_k_u,这看起来很丑陋,这个版本固定这个,任何大写的初始化应该正确转换。

错误RecordNotFound已重命名为ErrRecordNotFound

mssql驱动程序已从默认驱动程序中删除,

导入它用import _ "github.com/jinzhu/gorm/dialects/mssql"

Hstore已移至github.com/jinzhu/gorm/dialects/postgres

gorm执行sql

type Object interface {
  GroupOrderOpenlog() (uidList []int)
}
func (o *object) GroupOrderOpenlog() {
	type res struct {
		Uid int `json:"uid"`
	}
	var re []res
	sql:= "SELECT uid FROM order_openlog  GROUP BY uid"
	o.Db.Raw(sql).Scan(&amp;re)
	fmt.Println(re)
	for _,k :=range re{
		fmt.Println(k.Uid)
	}
}

以上就是golang gorm更新日志执行SQL示例详解的详细内容,更多关于golang gorm更新日志执行SQL的资料请关注脚本之家其它相关文章!

相关文章

  • Golang 文件操作:删除指定的文件方式

    Golang 文件操作:删除指定的文件方式

    这篇文章主要介绍了Golang 文件操作:删除指定的文件方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Golang三个编译基本命令的使用小结

    Golang三个编译基本命令的使用小结

    本文主要介绍了Golang三个编译基本命令的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Go语言使用组合的思想实现继承

    Go语言使用组合的思想实现继承

    这篇文章主要为大家详细介绍了在 Go 里面如何使用组合的思想实现“继承”,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以了解一下
    2022-12-12
  • 如何使用golang实现traceroute

    如何使用golang实现traceroute

    这篇文章主要介绍了如何使用golang实现traceroute,该工具在linux环境下的命令是traceroute或者tracepath,在windows下命令是tracert,本文给大家详细讲解需要的朋友可以参考下
    2023-04-04
  • Go 语言 IDE 中的 VSCode 配置使用教程

    Go 语言 IDE 中的 VSCode 配置使用教程

    Gogland 是 JetBrains 公司推出的Go语言集成开发环境。这篇文章主要介绍了Go 语言 IDE 中的 VSCode 配置使用教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Go Gin框架中的binding验证器使用小结

    Go Gin框架中的binding验证器使用小结

    Gin框架中的binding验证器为我们提供了简便的数据绑定和验证功能,通过合理使用binding和validate标签,我们可以确保API接口的数据合法性和完整性,这篇文章主要介绍了Go Gin框架中的binding验证器使用指南,需要的朋友可以参考下
    2024-07-07
  • Go Context库 使用基本示例

    Go Context库 使用基本示例

    在Go的http包中,每个请求由独立的goroutine处理,这些goroutine可能需要访问请求特定的数据或启动其他服务,Context在Go语言中提供了一种方式来传递请求域的数据、取消信号和截止时间,本文介绍Go Context库 使用基本示例,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • golang 40行代码实现通用协程池

    golang 40行代码实现通用协程池

    golang协程机制很方便的解决了并发编程的问题,但是协程并不是没有开销的,所以也需要适当限制一下数量。这篇文章主要介绍了golang 40行代码实现通用协程池,需要的朋友可以参考下
    2018-08-08
  • grpool goroutine池协程管理

    grpool goroutine池协程管理

    这篇文章主要介绍了grpool goroutine池协程管理,goroutine协程非常轻量级,这也是为什么go支持高并发,但是goroutine频繁创建销毁对GC的压力比较大,文章围绕主题展开详细的内容介绍,需要的小伙伴可以参考一下
    2022-06-06
  • golang通过http访问外部网址的操作方法

    golang通过http访问外部网址的操作方法

    这篇文章主要介绍了golang通过http访问外部网址的操作方法,分为 get方式访问外部的接口,Post方式请求外部接口,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2024-02-02

最新评论