若是已知主鍵的值,那麼能夠使用這些方法進行 CRUD 操做htm
對 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))
若是須要經過條件查詢獲取對象,請參見 高級查詢blog
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") ...
對象的其餘字段值將會是對應類型的默認值
複雜的單個對象查詢參見 One
嘗試從數據庫讀取,不存在的話就建立一個
默認必須傳入一個參數做爲條件字段,同時也支持多個參數多個條件字段
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) } }
第一個返回值爲自增健 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 賦值
同時插入多個對象
相似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 中的數據
第一個返回值爲影響的行數
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", ...) ...
根據複雜條件更新字段值參見 Update
第一個返回值爲影響的行數
o := orm.NewOrm() if num, err := o.Delete(&User{Id: 1}); err == nil { fmt.Println(num) }
Delete 操做會對反向關係進行操做,此例中 Post 擁有一個到 User 的外鍵。刪除 User 的時候。若是 on_delete 設置爲默認的級聯操做,將刪除對應的 Post
Changed in 1.0.3 刪除之後不會刪除 auto field 的值