IT序号网

go中的GORM的原生sql知识解答

luoye 2022年04月19日 编程语言 129 0
本文章主要介绍了go中的GORM的原生sql,具有不错的的参考价值,希望对您有所帮助,如解说有误或未考虑完全的地方,请您留言指出,谢谢!

1.原生 SQL

    数据库初始化

var db *gorm.DB 
 
func init() { 
   //gorm.Open("数据库类型", "用户名:密码@tcp(IP:port)/数据库名") 
   //注意: 为了正确的处理 time.Time ,你需要包含 parseTime 作为参数 
   d, err := gorm.Open("mysql", "root:xxxx@tcp(ip:port)/go_test?charset=utf8&parseTime=True&loc=Local") 
   if err != nil { 
   	panic(err) 
   } 
   db = d 
} 
//用户结构体 
type User struct { 
   // 将字段 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt` 注入到 `User` 模型中 
   //gorm.Model 
   Id       int64  `db:"id"` 
   Username string `db:"username"` 
   Password string `db:"password"` 
} 

    通过Exec操作原生sql

db.Exec("update t_user set password=? WHERE id = ?", "6666666",8) 

在这里插入图片描述

    通过RAW操作原生sql

	var user User 
	db.Raw("SELECT id,username, password FROM t_user WHERE id = ?", 8).Scan(&user) 
    fmt.Printf("%+v",user) 

在这里插入图片描述


2.row&rows

    先生成row,然后再从row中取值

    var username string 
    var password string 
	row := db.Table("t_user").Where("id = ?", 8).Select("username, password").Row() 
	row.Scan(&username, &password) 
	fmt.Printf("username:%v \n",username) 
	fmt.Printf("password:%v \n",password) 

Select后面的值要和数据库一直
row.Scan后面的变量名可以不一致
在这里插入图片描述
    先生成rows,然后再从rows中循环取值

rows, _ := db.Table("t_user").Select("username, password").Rows() 
	defer rows.Close() 
 
	for rows.Next() { 
		var user User 
		db.ScanRows(rows, &user) 
		fmt.Printf("user:%v \n",user) 
	} 

在这里插入图片描述


发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Lambda表达式知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。