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}
}
除了用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}
}
沒有留言:
張貼留言