begoo——物件的CRUD操作
阿新 • • 發佈:2018-12-15
如果已知主鍵的值,那麼可以使用這些方法進行CRUD操作
對object操作的四個方法Read/Insert/Update/Delete
o := orm.NewOrm() user := new(User) //建立一個空物件 user.Name = "slene" //給屬性賦值 fmt.Println(o.Insert(user)) //寫入資料庫 user.Name = "Your" fmt.Println(o.Update(user)) //更新操作 fmt.Println(o.Read(user)) //檢視操作 fmt.Println(o.Delete(user)) //刪除操作
Read
o := orm.NewOrm() user := User{Id: 1} //建立一個結構體變數,其實就是一個物件 err := o.Read(&user) //在資料庫中檢視該物件,理論上查詢不到 if err == orm.ErrNoRows { fmt.Println("查詢不到") } else if err == orm.ErrMissPK { fmt.Println("找不到主鍵") } else { fmt.Println(user.Id, user.Name) }
Read預設通過主鍵賦值,可以使用指定的欄位進行查詢:
user := User{Name: "slene"} err = o.Read(&user, "Name") ...
物件的其它欄位值將會是對應型別的預設值。
ReadOrCreate
嘗試從資料庫讀取,不存在的話就建立一個。
預設必須傳入一個引數作為條件欄位,同時也支援多個引數多個條件欄位
o := orm.NewOrm() user := User{Name: "slene"} // 三個返回引數依次為:是否新建立的,物件 Id 值,錯誤 if created, id, err := o.ReadOrCreate(&user, "Name"); err == nil { if created { fmt.Println("New Insert an object. Id:", id) } else { fmt.Println("Get an object. Id:", id) } }
Insert
第一個返回值為自增鍵id的值
o := orm.NewOrm() var user User user.Name = "slene" user.IsActive = true id, err := o.Insert(&user) if err == nil { fmt.Println(id) }
建立後會自動對auto的field賦值。
InsertMulti
同時插入多個物件
類似sql語句
insert into table (name, age) values("slene", 28),("astaxie", 30),("unknown", 20)
第一個引數bulk為並列插入的數量,第二個為物件的slice,返回值為成功插入的數量。
users := []User{ {Name: "slene"}, {Name: "astaxie"}, {Name: "unknown"}, ... } successNums, err := o.InsertMulti(100, users)
bulk為1時,將會順序插入slice中的資料。
Update
第一個返回值為影響的行數(對那行做的更新)
o := orm.NewOrm() user := User{Id: 1} if o.Read(&user) == nil { user.Name = "MyName" if num, err := o.Update(&user); err == nil { fmt.Println(num) } }
Update預設更新所有的欄位,可以更新指定的欄位
// 只更新 Name o.Update(&user, "Name") // 指定多個欄位 // o.Update(&user, "Field1", "Field2", ...) ...
Delete
第一個返回值為影響的行數
o := orm.NewOrm() if num, err := o.Delete(&User{Id: 1}); err == nil { fmt.Println(num) }
Delete操作會對反向關係進行操作,此例中Post擁有一個到User的外來鍵。刪除User的時候,如果on_delete設定為預設的級聯操作,將刪除對應的Post