AdSense

網頁

2022/12/22

Golang GORM 修改資料 update data

Go使用GORM ORM套件修改資料的方式如下。


範例環境:

  • Go 1.19
  • GORM 2.0 (gorm.io/gorm v1.24.2)
  • PostgreSQL 14


事前要求

參考「Golang GORM PostgreSQL基本設定」設定資料庫及安裝GORM套件。


範例

GORM使用gorm.DB.Model(value interface{})設定要修改的model,然後呼叫gorm.DB.Update(column string, value interface{})來修改資料,輸入參數為要修改的欄位及值。

例如下面以gorm.DB.Model設定model Employee然後呼叫gorm.DB.Update依model primary key Employee.ID為修改對象條件來修改符合條件的employee.age欄位值為4,最後返回操作後的gorm.DB物件。

呼叫操作後的gorm.DB.Error可返回操作錯誤,若成功則為nil。

呼叫操作後的gorm.DB.RowsAffected可返回修改的筆數。

main.go

package main

import (
    "fmt"
    "time"

    "gorm.io/driver/postgres"
    "gorm.io/gorm"
    "gorm.io/gorm/schema"
)

type Employee struct {
    ID        int64     // primary key, column name is `id`
    Name      string    // column name is `name`
    Age       int       // column name is `age`
    CreatedAt time.Time // column name is `created_at`
}

const (...)

func getGormDB() *gorm.DB {...}

func main() {
    db := getGormDB()

    emp := Employee{
        ID: 1, // primary key
    }

    result := db.Model(&emp).Update("age", "34") // UPDATE employee SET age = 34 WHERE id = 1;
    fmt.Println(result.Error)                    // nil
    fmt.Println(result.RowsAffected)             // 1

    db.First(&emp)   // SELECT * FROM employee WHERE id = 1;
    fmt.Println(emp) // {1 john 34 2022-12-22 21:56:37.061419 +0000 UTC}
}

github


除了用model的primary key為修改對象的條件,也可使用gorm.DB.Where(query interface{}, args ...interface{})設定修改條件。

例如下面以gorm.DB.Where設定修改條件為employee.name='john'

main.go

package main
...
func main() {
    db := getGormDB()

    db.Model(&Employee{}).Where("name = ?", "john").Update("age", 33) // UPDATE employee SET age = 33 WHERE name = 'john';

    emp := Employee{
        ID: 1,
    }
    db.First(&emp)   // SELECT * FROM employee WHERE id = 1;
    fmt.Println(emp) // {1 john 33 2022-12-22 21:56:37.061419 +0000 UTC}

}

github



沒有留言:

AdSense