乐闻世界logo
搜索文章和话题

使用Raw查询时如何在golang go orm中检索上次插入的ID

1 个月前提问
1 个月前修改
浏览次数11

1个答案

1

在使用 Go 的 ORM 框架时,如 GORM,处理基于 SQL 的原生查询是一个常见的操作。尤其在执行插入操作后需要获取最新插入的记录的 ID 时,这个功能就显得尤为重要。以下是在 Golang 使用 GORM 执行原生 SQL 插入并获取最新 ID 的步骤和示例。

第一步:配置 GORM 和数据库连接

首先,需要导入 GORM 包并配置数据库连接。假设我们使用的是 MySQL 数据库:

go
package main import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" ) func main() { // 连接字符串 "用户名:密码@tcp(地址:端口)/数据库?charset=utf8mb4&parseTime=True&loc=Local" dsn := "your_user:your_password@tcp(127.0.0.1:3306)/your_db?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic("failed to connect database") } // 接下来可以使用 db 对象进行数据库操作 }

第二步:使用原生 SQL 插入数据并检索 ID

在 GORM 中,可以使用 Exec 方法执行原生 SQL 命令。如果你想在插入数据后获取该数据的 ID,可以利用 SQL 中的 LAST_INSERT_ID() 函数(在 MySQL 中)。这是一个示例:

go
package main import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" ) func main() { // ... (数据库连接代码) // 假设我们有一个名为 `users` 的表,字段包括 id, name, age sql := "INSERT INTO users (name, age) VALUES (?, ?)" result := db.Exec(sql, "John Doe", 30) if result.Error != nil { panic(result.Error) } // 获取最新插入的 ID var lastInsertId int db.Raw("SELECT LAST_INSERT_ID()").Scan(&lastInsertId) fmt.Printf("Last inserted ID: %d\n", lastInsertId) }

注意:

  • 确保使用的 SQL 语法与你的数据库类型相匹配。不同的数据库系统(如 PostgreSQL, SQLite 等)可能有不同的函数来获取最后一个插入的 ID。
  • 在生产环境中,应确保对所有输入进行适当的验证和清理,以防止 SQL 注入等安全问题。

通过上述步骤,你可以在使用 GORM 进行 ORM 操作时,有效地执行原生 SQL 插入并检索最新插入的记录的 ID。

2024年8月12日 18:25 回复

你的答案