GORM操作MySQL數據庫-連接數據庫以及對表的操作


一、連接數據庫:

    dsn := "root:123456@tcp(127.0.0.1:3306)/more?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil{
        return
    }

賬號:密碼@tcp(127.0.0.1:3306)/庫名

二、遷移表

package main

import (
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
   "time"
)

type User struct {
   ID int  字段名:大寫開頭!
   Name string
   CreatedTime time.Time
}
func main() {
   dsn := "root:123456@tcp(127.0.0.1:3306)/more?charset=utf8mb4&parseTime=True&loc=Local"
   db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
   if err != nil{
      return
   }
   db.AutoMigrate(&User{})
}

 關於表名:GORM 將 struct name 復數snake_cases為表名,對於 struct User,其表名是users約定俗成的,

測試一下


type User struct {
    ID int
    Name string
    CreatedTime time.Time
}
type UserInfo struct { ID int Info string }

func main() {
    dsn := "root:123456@tcp(127.0.0.1:3306)/more?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil{
        return
    }
    db.AutoMigrate(&User{})
    db.AutoMigrate(&UserInfo{})

}

自定義表名:實現Tabler接口

例:


type User struct {
    ID int
    Name string
    CreatedTime time.Time
}
type UserInfo struct { ID int Info string } func (UserInfo) TableName() string { return "infos" }

func main() {
    dsn := "root:123456@tcp(127.0.0.1:3306)/more?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil{
        return
    }
    db.AutoMigrate(&User{})
    db.AutoMigrate(&UserInfo{})

}

 

 

 還有一種方法自定義表名:


type User struct {
    ID int
    Name string
    CreatedTime time.Time
}
type UserInfo struct {
    ID int
    Info string
}

func (UserInfo) TableName() string {
    return "infos"
}

func main() {
    dsn := "root:123456@tcp(127.0.0.1:3306)/more?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil{
        return
    }
    //db.AutoMigrate(&User{})
    //db.AutoMigrate(&UserInfo{})
    db.Table("info_table").AutoMigrate(&UserInfo{})

}

 

 

 

關於字段名:大寫開頭!

type User struct {
ID uint // column name is `id`
Name string // column name is `name`
Birthday time.Time // column name is `birthday`
CreatedAt time.Time // column name is `created_at`
}
當然你也可以自定義
type Animal struct {
AnimalID int64 `gorm:"column:beast_id"` // set name to `beast_id`
Birthday time.Time `gorm:"column:day_of_the_beast"` // set name to `day_of_the_beast`
Age int64 `gorm:"column:age_of_the_beast"` // set name to `age_of_the_beast`
}
看起來無論表名還是字段名,GORM默認的規則都是比較合適的,命名比較規范的話,使用默認的即可。
設置默認值:
type User struct { 
  gorm.Model 
  Name string
   Age * int            `gorm:"default:18"`
   Active sql.NullBool `gorm:"default:true"`
 }

 

 三、關於字段的增刪改

1.增加字段

   直接在結構體添加即可

    AutoMigrate 將創建缺少外鍵、約束、列和索引的表。如果現有列的大小、精度、可為空值發生變化,它將更改現有列的類型。

type User struct {
ID int
Name string
Desc string
CreatedTime time.Time
}


func main() {
dsn := "root:123456@tcp(127.0.0.1:3306)/more?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil{
return
}
db.AutoMigrate(&User{})

}

也可以

// 添加名稱字段
db.Migrator().AddColumn(&User{}, "Name" ) 

 

2.刪除字段

         直接在結構體刪除字段是無效的。這是因為AutoMigrate 不會刪除未使用的列,保護您的數據。

type User struct {
    ID int
    Name string CreatedTime time.Time } 

func main() {
    dsn := "root:123456@tcp(127.0.0.1:3306)/more?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil{
        return
    }
    db.AutoMigrate(&User{})

}

 
         
db.Migrator().DropColumn(&User{}, "Desc" ) 
// 刪除字段

 

 3.修改字段

    db.Migrator ().RenameColumn(&User{}, "name", "NameNew" )

 

 這里的名字好像沒有按原始的那樣。

    db.Migrator ().RenameColumn(&User{}, "Name", "name_new" )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM