beego ORM 的高级操作


beego ORM 的高级操作

ORM 以 QuerySeter 来组织查询,每个返回 QuerySeter 的方法都会获得一个新的 QuerySeter 对象。


新建一个 ormer 对象

o := orm.NewOrm()       //   ormer对象的接口 

    type Ormer interface {
        Read(interface{}, string) error
        ReadOrCreate(interface{}, string, string) (bool, int64, error)
        Insert(interface{}) (int64, error)
        InsertMulti(int, interface{}) (int64, error)
        Update(interface{}, string) (int64, error)
        Delete(interface{}) (int64, error)
        LoadRelated(interface{}, string, interface{}) (int64, error)
        QueryM2M(interface{}, string) QueryM2Mer
        QueryTable(interface{}) QuerySeter
        Using(string) error
        Begin() error
        Commit() error
        Rollback() error
        Raw(string, interface{}) RawSeter
        Driver() Driver
    }


得到一个 queryseter 对象

qs := o.QueryTable("表名")   得到一个 QuerySeter 对象
        
        type QuerySeter interface {
            Filter(string, interface{}) QuerySeter
            Exclude(string, interface{}) QuerySeter
            SetCond(*Condition) QuerySeter
            Limit(int, int64) QuerySeter
            Offset(int64) QuerySeter
            GroupBy(string) QuerySeter
            OrderBy(string) QuerySeter
            Distinct() QuerySeter
            RelatedSel(interface{}) QuerySeter
            Count() (int64, error)
            Exist() bool
            Update(Params) (int64, error)
            Delete() (int64, error)
            PrepareInsert() (Inserter, error)
            All(interface{}, string) (int64, error)
            One(interface{}, string) error
            Values(*[]Params, string) (int64, error)
            ValuesList(*[]ParamsList, string) (int64, error)
            ValuesFlat(*ParamsList, string) (int64, error)
        }

orm 的 增删改查

    
    package main
    import (
       "github.com/astaxie/beego/orm"
       "go_spider/models"
    )
    
    func init() {
       models.RegisterDB()
    }
    
    func main() {
    
       orm.Debug = true
       //orm.RunSyncdb("default",false,true)
    
       o := orm.NewOrm()
       //o.Using("db1")
       o.Using("default")
    
       //     update
    
           //user := models.Student{Id:1}
           //if o.Read(&user) == nil {
           // user.Name = "MyName123"
           // user.Hobby = "eat"
           // if num, err := o.Update(&user,"Name","Hobby"); err == nil {
           // //if num, err := o.Update(&user); err == nil {
           //    fmt.Println(num)
           // }
           //}
    
       //    查找   read()
    
           //user := models.User{Name:"selena"}
           //
           //err := o.Read(&user,"Name")  //  通过其他字段进行 查找
           //if err == orm.ErrNoRows{
           // fmt.Println("查询不到")
           //}else if err == orm.ErrMissPK{
           // fmt.Println("找不到主键")
           //}else {
           // fmt.Println(user.Id, user.Profile.Age)
    

           //user := models.User{Name:"ally"}
           //created, id, err := o.ReadOrCreate(&user,"Name");
           //fmt.Println(created,id,err)
    
       //     批量插入
    
           //users := []models.Student{
           // {Name:"a"},
           // {Name:"aa"},
           // {Name:"a1"},
           // {Name:"a4"},
           //}
         
           //successNums, err := o.InsertMulti(100,users)
           //fmt.Println(successNums,err)
          
          
           //if num, err := o.Delete(&models.Student{Id:1}); err == nil {
           // fmt.Println(num)
           //}
    
           //user := models.User{Id:1}
           //o.Read(&user)
           //
           //var maps []orm.Params
           //num, err := o.QueryTable("tag").Values(&maps)
           //fmt.Println(num,err,maps)
        
           //post := new(models.Post)
           //
           //post.Title = "hello go"
           //post.User = &user
           //post.Tags =
    
           //user := new(models.User)
           //user.Profile = &profile1
    }
    
    
           //res, err  = p.Exec("testing", "astaxie")
           //res, err := p.Exec("testing", "slene")
           //p, err := o.Raw("UPDATE user SET name = ? WHERE name = ?").Prepare()
           //
           
           
       //用于一次 prepare 多次 exec,以提高批量执行的速度。
  

       //p.Exec([]int{4,5,6})
       //p.Exec(ids)
       //p, _ := o.Raw(`SELECT * FROM user WHERE id IN (?,?,?)`).Prepare()
       //ids := []int{1,2,3}
    
       //   Prepare()
    
    
       //fmt.Println(res,err,users)
       //res, err := o.Raw(sql,ids).QueryRows(&users)   //  获取得到的结果
       //sql := `SELECT * FROM user WHERE id IN (?,?,?)`
       //ids := []int{1,2,3}
       //var users []models.User
    
    
       //fmt.Println(res,err,users)
       //res, err := o.Raw(sql,ids).Exec()        //  执行
       //sql := `SELECT * FROM user WHERE id IN (?,?,?)`
       //ids := []int{1,2,3}
       //var users []models.User
    
    
    
       // =======================  原生SQL 查询 ======================//
    
    
    
    
       //fmt.Println(num,err)
       //num, err := m2m.Count()   //  获取 所有的关联数量
       //m2m := o.QueryM2M(&post,"Tags")
       //
       //fmt.Println(num,err)
       //num, err := m2m.Clear()   //  删除 所有的关联
       //m2m := o.QueryM2M(&post,"Tags")
    
       //fmt.Println(ret)
       //ret := m2m.Exist(&models.Tag{Id:1})
       //
       //m2m := o.QueryM2M(&post, "Tags")
    
       //     查看 某个标签是否在 对应的关系中
    
               //o.Read(&post)
               //post := models.Post{Id:1}
            
               o.QueryTable("post").Filter("id",2).One(&post)
               post := models.Post{}
            
            
               //m2m.Remove(tags)
               //
               //m2m := o.QueryM2M(&post,"Tags")
               //
               //qs.Filter("id__gt",8).All(&tags)
               //qs := o.QueryTable("tag")
               //
               //tags := []*models.Tag{}
               //
               //
               //o.Read(&post)
               //post := models.Post{Id:3}
    
       //  删除 多个对象
    
    
           //
           //m2m.Add(tags1)
           //qs.Filter("id__gt",5).All(&tags1)
           //qs := o.QueryTable("tag")
           //tags1 := []*models.Tag{}
           //m2m := o.QueryM2M(&post,"Tags")
           //post :=models.Post{Id:2}
    
       //   3    先查询 要操作的 tags  再加入
    
    
       //m2m.Add(tags)
       //o.InsertMulti(100,&tags)
       //}
       // {Name:"lua"},
       // {Name:"php"},
       // {Name:"python"},
       //tags := []*models.Tag{
       //
       //m2m := o.QueryM2M(&post,"Tags")
       //post :=models.Post{Id:2}
    
       //   2   批量加入 失败 insertbulk
    
    
       //m2m.Add(tags)
       //o.Insert(&tags)
       //tags := models.Tag{Name:"java"}
       //
       //m2m := o.QueryM2M(&post,"Tags")
       //post :=models.Post{Id:3}
    
       //    1    加入一个
    
    
    
    
    
       //}
       // fmt.Println(num)
       //if err == nil {
       //num, err := m2m.Add(tag)
       //o.Insert(&tag)
       //tag := &models.Tag{Name:"golang"}
       //
       //m2m := o.QueryM2M(&post,"Tags")
       //post := models.Post{Id:1}
    
       //   创建一个多对多的   对象
    
    
    
    
       //fmt.Println(o.Insert(user))
       //fmt.Println(o.Insert(profile))
       //
       //user.Name = "selena"
       //user.Profile = profile
       //user := new(models.User)
       //
       //
       //profile.Age = 30
       //profile := new(models.Profile)
    
       //fmt.Println(err, num)
       //
       //num, err := o.LoadRelated(&post, "Tags")
       //err := o.Read(&post)
       //post := models.Post{Id: 1}
       //
       //}
       //
       // }
       //    }
       //       fmt.Println(tag.Name)
       //    for _, tag := range tags {
       // if err == nil {
       // _, err := o.QueryTable("tag").Filter("Posts__Post__Title","hello go").All(&tags)
       // tags  := []*models.Tag{}
    
       //     多对多  2
    
       //}
       // }
       //    fmt.Println(post.Title)
       // for _,post := range posts {
       //if err ==nil {
       //
       //_, err := o.QueryTable("post").Filter("Tags__Tag__Name","blue").All(&posts)
       //var  posts []*models.Post
       //
       //  多查多  1
    
       //}
       // }
       //    fmt.Println(post.Id,post.User,post.User.Name)
       // for _, post := range posts {
       // fmt.Println("posts nums:", num)
       //if err == nil {
       //num, err := o.QueryTable("post").Filter("User",1).RelatedSel().All(&posts)
       //var posts []*models.Post
    
       //  一查多
    
       //fmt.Println(profile)
       //fmt.Println(profile)
       //
       //}
       //panic(err)
       //if err != nil {
       //
       //err := o.QueryTable("profile").Filter("user__id",1).One(&profile)
       //
       //var profile  models.Profile
       //
       //
       //fmt.Println(user.Profile.User)
       //fmt.Println(user.Profile)
       //o.QueryTable("user").Filter("Id",1).RelatedSel().One(user)
       //
       ////fmt.Println(user.Profile)
       ////
       ////}
       ////o.Read(user.Profile)
       ////if user.Profile != nil {
       ////o.Read(&user)
       //user := &models.User{}
    
       //4    接收者 orm.ParamsList----方法 ValuesFlat   [selena ally bob cac appe] orm.ParamsList
    
       //fmt.Println(maps,reflect.TypeOf(maps))
       //qs.ValuesFlat(&maps,"name")
       //var maps orm.ParamsList
    
       //   3  接收者[]models.User----方法All     [{1 selena <nil> []} {2 ally <nil> []} {3 bob <nil> []} {4 cac <nil> []} {5 appe <nil> []}] []models.User
    
       //fmt.Println(maps,reflect.TypeOf(maps))
       //qs.All(&maps,"id","name")
       //var maps []models.User
       //
    
       //   2  接收者[]orm.Params----方法Values    [map[Id:1 Name:selena] map[Id:2 Name:ally] map[Id:3 Name:bob] map[Id:4 Name:cac] map[Id:5 Name:appe]] []orm.Params
    
       //fmt.Println(maps,reflect.TypeOf(maps))
       //qs.Values(&maps,"id","name")
       //var maps []orm.Params
    
       //       1  接受者[]orm.ParamsList----方法ValuesList    [[1 selena] [2 ally] [3 bob] [4 cac] [5 appe]] []orm.ParamsList
    
       //fmt.Println(maps,reflect.TypeOf(maps))
       //qs.ValuesList(&maps,"id","name")
       //var maps []orm.ParamsList
    
       //var  DefaultRelsDepth int = 5
    
       //fmt.Println(nums, err)
       //nums, err := qs.SetCond(cond1).Count()
       //
       //cond1 := cond.And("profile__isnull",false).AndNot("name__isnull",true).Or("profile__age__gt",200)
       //cond := orm.NewCondition()
       //
    
       //qs.Filter("name__iexact","ele").All(&users)
       //
       //qs.Filter("profile__age__in",45,60).Exclude("profile__id__gt",10).One(&user)
       //
       //qs.Filter("profile__age__in",45,60).One(&user)
       //qs.Filter("profile__age__gte",45).One(&user)
       //qs.Filter("profile__age",63).One(&user)
       //qs.Filter("id",1).One(&user)
       //var users []models.User
       //var user models.User
    
       //qs := o.QueryTable("user")
    
       //o.Insert(user)
       //
    


Buy me a 肥仔水!