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

gorm exec使用原始sql从insert transaction返回ID

是指在使用gorm库进行数据库操作时,通过执行原始的SQL语句来实现插入事务并返回插入记录的ID。

在gorm中,可以使用Exec方法执行原始的SQL语句。对于插入操作,可以使用INSERT INTO语句来插入数据,并通过RETURNING子句来返回插入记录的ID。

以下是一个示例代码:

代码语言:txt
复制
type User struct {
    ID   uint
    Name string
}

func CreateUser(db *gorm.DB, user *User) (uint, error) {
    var id uint
    err := db.Exec("INSERT INTO users (name) VALUES (?) RETURNING id", user.Name).Scan(&id).Error
    if err != nil {
        return 0, err
    }
    return id, nil
}

在上述代码中,我们定义了一个User结构体,其中包含了ID和Name字段。CreateUser函数接收一个db参数,表示gorm的数据库连接对象,以及一个user参数,表示要插入的用户数据。

CreateUser函数中,我们使用Exec方法执行原始的SQL语句。通过RETURNING id子句,我们可以在插入数据的同时返回插入记录的ID。使用Scan方法将返回的ID值赋给id变量。

最后,我们将插入记录的ID和可能发生的错误作为结果返回。

这种方式可以在需要使用原始SQL语句进行数据库操作时,实现插入事务并返回插入记录的ID。在实际应用中,可以根据具体的业务需求和数据库类型进行相应的调整和优化。

腾讯云相关产品和产品介绍链接地址:

  • 云数据库 TencentDB:https://cloud.tencent.com/product/cdb
  • 云服务器 CVM:https://cloud.tencent.com/product/cvm
  • 云原生应用引擎 TKE:https://cloud.tencent.com/product/tke
  • 人工智能平台 AI Lab:https://cloud.tencent.com/product/ai
  • 物联网平台 IoT Hub:https://cloud.tencent.com/product/iothub
  • 移动开发平台 MSDK:https://cloud.tencent.com/product/msdk
  • 云存储 COS:https://cloud.tencent.com/product/cos
  • 区块链服务 BaaS:https://cloud.tencent.com/product/baas
  • 元宇宙服务 Meta Universe:https://cloud.tencent.com/product/meta-universe

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

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

相关·内容

DatabaseSQL与GORM实践

作者张金柱老师介绍了Go语言原生database/sql的实现原理和使用方式,并且进一步给出了自己设计GORM框架的出发点和一些实现细节。...这里留意上图我给出的一些注释,它们来自源码包中的对应方法的注释,以sql.Open()方法为例,它说了Open方法可能只是会校验参数的语法而非真正建立连接,为了验证数据源的有效性可以用Ping方法,并且第二个红框中介绍到返回的...) } return nil } 1.4 插入 这里要说明一下,下面的插入、更新、删除使用到的API是同一个:db.Exec,args参数是任意个占位参数。...where id = ?" ret, err := db.Exec(sqlStr, 20, 3) if err !...GORM文档已经十分清爽完备,最终决定不再笔记中二次赘述。 小结 GORM还是原生database/sql,都是在应用程序层面,向用户隐藏了底层连接数据库,操作数据库的实现细节。

40030

【Golang】快速复习指南QuickReview(十一)——数据库访问(MySql为例)

sql.Open():仅仅是配置连接,但并不真正连接,需要两个参数: 数据库驱动名称 数据库连接字符串 返回一个执行sql.DB这个struct的指针:*sql.DB 这个指针才是我们操作数据库的关键钥匙...包中只有一个方法:Exec,这里就省略delete操作,实际业务上很少使用物理删除。...插入 func Insert() error { // _, err := db.Exec("INSERT INTO notifypush(AppName,Target,PushType,DeviceType...= nil { log.Fatalln(err.Error()) } defer stmt.Close() _, err = stmt.Exec("insert-app", 1, 2, 3,...\sqltest.exe #运行 5.ORM 5.1 GORM GORM是GoLang中最出色的ORM框架,支持MySQL、PostgreSQL、Sqlite、SQL Server,功能非常强大,也可以直接执行

65120

gorm hook使用中的问题及核心源码解读

本文针对的是gorm V2版本。hook官方文档可以点击这里,本文旨在对官方文档作一些补充说明。 下文中所有的DB均指gorm.Open返回的DB对象。...type User struct { ID int64 Name string Age int32 IsAdmin bool IsValid bool LoginTime time.Time...("invalid Age or Name") } return nil } 但是如果多Model上有同样的逻辑(比如插入数据后记录日志),若使用hook实现,只能在每个Model上分别实现,或者考虑改用...Save方法的作用,源码中的注释是这样说的:Save update value in database, if the value doesn’t have primary key, will insert..., 12).Delete(&User{}) 在现在的DB上定义一个不同配置的Session,用这个session来执行sql即可。 6. hook机制在源码中是如何实现的?

4.7K10

分布式事务框架 seata-golang 接入指南

如果使用 dubbo-go 框架,dubbo-go 会 context 中读取 attachment 将其序列化传递给服务端。...seata 通过代理数据源,对 sql 语句进行解析,来获取修改数据的修改前和修改后的数据,供 transaction coordinator 回滚时使用。..., {你的 sql driver 实例}) 如果你使用了 xorm 或者 gorm,则可从 xorm 对象或者 gorm 对象中取出 sql driver 实例,用上面的方法构造出 seata-golang...执行 sql 语句则使用该分支事务对象 tx 的 Exec 方法 func (tx *Tx) Exec(query string, args ...interface{}) (sql.Result, error...最后,整个分支事务是否成功提交,执行成功还是失败需要返回结果给调用方,也就是全局事务的发起方,transaction manager 会根据返回的结果决定是否提交或回滚整个全局事务。 ?

2.8K10

Go(五)不知道怎么用Gorm

本文也不探究Gorm和其他框架的优劣比较,而是使用者出发,一起来探讨Gorm在实际开发中的使用。...” 设置连接池 Gorm同样支持连接池,Gorm使用 database/sql 维护连接池 分别使用SetMaxIdleConns,SetMaxOpenConns,SetConnMaxLifetime...Gorm去建立数据库连接了,但是有没有什么办法像Spring Boot一样配置文件中获取连接参数呢,恰好第三章中讲到了怎么使用读取配置文件的方法,那何不利用起来呢?...匿名事务 可使用db.Transaction匿名方法来表明多个操作在一个事务里面,返回err将回滚,返回nil将提交事务 func Transaction() error { db := config.GetDb...() err := db.Transaction(func(tx *gorm.DB) error { // 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db') if

1.9K11

手把手带你0搭建一个Golang ORM框架(全)!

执行原生sql的增删改操作Exec go原生的sql代码,提供了Exec方法,用于增删改的操作,也就是本文开头的原生demo中的第一种方式: result, err := db.Exec("INSERT...,"lisi","dev","2020-08-04") 其实,你是可以不传后面的几个参数,不使用问号占位符的,第一个参数直接传完整的sql即可,像这样: result, err := db.Exec(...(id int64, err error) { result, err := e.Db.Exec(sql) e.Sql = sql if err !..., _ := result.RowsAffected() return rowsAffected, nil }} 我们通过判断sql是的语句是新增还是其他,因为新增的话一般情况是要返回自增ID的...这样,我们就可以很方便的调用原生的sql语句了: //result, err:= e.Exec("insert into userinfo(username,departname,created

1.2K30
领券