網頁

2022/12/29

Golang GORM 刪除資料 delete 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.Delete(value interface{}, conds ...interface{})來刪除資料,輸入參數value為要刪除的model,若model含有primary key值則以primary key為刪除條件。

例如下面呼叫gorm.DB.Delete依model primary key Employee.ID刪除。

呼叫操作後的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.Delete(&Employee{}) // DELETE FROM employee WHERE id = 1
    fmt.Println(result.Error)        // nil
    fmt.Println(result.RowsAffected) // 1
}

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

例如下面以gorm.DB.Where設定刪除條件為employee.age < 30

main.go

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

    result := db.Where("age < ?", 30).Delete(&Employee{}) // DELETE FROM employee WHERE age < 30
    fmt.Println(result.Error)                             // nil
    fmt.Println(result.RowsAffected)                      // 1
}


沒有留言:

張貼留言