Raw和Exec
在 GORM
中,db.Raw
和 db.Exec
是执行 原生 SQL
查询的两种不同方法,它们有不同的用途和返回值。
db.Raw
用于执行原生 SQL 查询并返回记录。通常用于执行SELECT
查询,需要使用Scan
方法将结果扫描到指定的结构体或变量中db.Exec
用于执行不需要返回记录的原生 SQL 查询,通常用于INSERT
、UPDATE
、DELETE
语句,或者执行DDL
(数据定义语言)语句,如创建表或修改表结构, 不需要Scan
,可以直接检查result.RowsAffected
和result.Error
.
Raw
var users []User
result := db.Raw("SELECT id, name, email FROM users").Scan(&users)
if result.Error != nil {
fmt.Println(result.Error)
return
}
for _, user := range users {
fmt.Printf("ID: %d, Name: %s, Email: %s\n", user.ID, user.Name, user.Email)
}
Exec
result := db.Exec("INSERT INTO users (name, email) VALUES (?, ?)", "John Doe", "john@example.com")
if result.Error != nil {
fmt.Println(result.Error)
return
}
fmt.Printf("Rows affected: %d\n", result.RowsAffected)