Go操作數據庫

go提供了一些標準庫讓我們和數據庫交互, database/sql是golang的標準庫之一,它提供了一系列接口方法,用於訪問關係數據庫。 不同的數據庫驅動,需要去實現各種方法

func main(){
	db,err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/htadmin")
}

此時會報錯,說mysql 驅動不存在。安裝mysql驅動

go get github.com/go-sql-driver/mysql
---------------------------------
import(
"database/sql"
_ "github.com/go-sql-driver/mysql"  //需要引入這個包
)

 獲取到db對象,查詢用db.Query(sql), DDL操作用db.Exec(sql),用Scan方法把結果賦值給模型實例

模型結構(和表對應)
type User struct {
	ID int64 `db:"id"`
	UserId int64 `db:"user_id"`
}
func main(){
	s := new(User);
	db,err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/htadmin")	
	rows,err := db.Query("select id,user_id from user_addresses") //返回的字段數要和scan接受的參數一致
    results,err:=db.Exec("UPDATE message SET salary=? where id=?",8900,3)//這是更新語句
	for rows.Next(){
		rows.Scan(&s.UserId, &s.ID) //把查詢出來的字段賦值給模型實例
		fmt.Println(s)
	}
}

GO還有一些第三方庫,方便我們和數據庫交互,比如:

gorm操作數據庫

http://gorm.book.jasperxu.com/crud.html#c  中文文檔鏈接

1.安裝第三方庫

go get -u github.com/jinzhu/gorm
//創建User模型
type User struct{
	gorm.Model
    Name string `gorm:"column:name"` //gorm:"column:name"指定表的字段
	Email string `gorm:"column:email"`
	Password string `gorm:"column:password"`
}
func (u User) TableName() string{
	return "users" //這就是User模型綁定的表名,如果不指定,默認是模型複數
}
func main(){
	db,err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/htadmin")
	defer db.Close()
	user:=User{ //創建一個模型對象並且實例化
		Name:     "張三",
		Email:    "[email protected]",
		Password: "$10$wqvwRQiHYOBCrR6dUdEzY.eYxC8XI9I6BUWPM8K.DzMEsjw66bX2K",
	}
	res := db.NewRecord(user)//檢測主鍵是否存在,返回true
	db.Create(&user) //執行插入操作
    
    //查詢操作,獲取結果集one
    var one []User
	db.Table("users").Select("id,name,email,password").Where("name=?", "張三").Scan(&one)
	for _,v := range one{
		fmt.Println(v.ID,v.Name)
	}
}

 常用查詢方式

查詢一條
var one User //如果查詢一條數據,一個模型對象存儲即可
db.First(&one,5) //where id=5
db.Where("name=?", "張三").First(&one) //where name="張三"

查詢所有匹配結果集
var ones []User //數組
db.Where("name=?", "張三").Find(&ones)

//多個條件鏈式查詢
db.Where("role = ?", "admin").Or("role = ?", "super_admin").Not("name = ?", "jinzhu").Find(&ones) 

//指定字段
db.Select("name, age").Find(&users) 
for _,v := range ones{
	fmt.Println(v.ID,v.Name)
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章