内容来自对 chatgpt 的咨询
题目
假设你有一张学生数据库表,需要通过golang 的gorm查询某个id的学生实体
查询 demo
在这段代码中,"student"变量是一个Student类型的结构体,用于存储查询结果。我们通过调用gorm.DB的Where方法和 First
方法,将第一个符合条件的结果存储到了"student"中。查找结果为空,返回一个gorm.ErrRecordNotFound
错误。
package main
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"log"
)
type Student struct {
ID int `gorm:"primary_key"`
Name string `gorm:"not null"`
Age int `gorm:"not null"`
Grade string `gorm:"not null"`
Address string `gorm:"not null"`
}
func main() {
db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
if err != nil {
log.Fatal(err)
}
defer db.Close()
var student Student
err = db.Where("id = ?", 1).First(&student).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
log.Print("No record found")
} else {
log.Print("Query failed", err)
}
} else {
log.Printf("Found student: %+v", student)
}
}
特别提醒
当你使用First,Take,Last方法且 Gorm 未找到任何记录时,Gorm会返回 gorm.ErrRecordNotFound
错误。但是,对于其他查询方法如Find,如果未找到任何记录,Gorm 不会 返回 gorm.ErrRecordNotFound
错误,而是返回一个零值对象且错误为nil。
使用 Find 查询的案例。
var students []Student
err := db.Where("id = ?", 1).Find(&students).Error
if err != nil {
log.Print("Query error: ", err)
}
if len(students) == 0{
log.Print("No records found")
}