《go web 编程》第四章 访问数据库:使用 Beego orm 库进行 ORM 开发

更新数据

继续上面的例子来演示更新操作,现在 user 的主键已经有值了,此时调用 Insert 接口,beego orm 内部会自动调用 update 以进行数据的更新而非插入操作。


o := orm.NewOrm()
user := User{Uid: 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", ...)
// Where: 用来设置条件,支持多个参数,第一个参数如果为整数,相当于调用了 Where ("主键 =?", 值)。

查询数据

beego orm 的查询接口比较灵活,具体使用请看下面的例子

例子 1,根据主键获取数据:


o := orm.NewOrm()
var user User

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)
}

例子 2:


image.png

例子 3,WHERE IN 查询条件:


image.png

例子 4,更加复杂的条件:

qs.Filter("profile__age__in", 18, 20).Exclude("profile__lt", 1000)
// WHERE profile.age IN (18, 20) AND NOT profile_id < 1000

可以通过如下接口获取多条数据,请看示例

例子 1,根据条件 age > 17,获取 20 位置开始的 10 条数据的数据

var allusers []User
qs.Filter("profile__age__gt", 17)
// WHERE profile.age > 17

例子 2,limit 默认从 10 开始,获取 10 条数据

qs.Limit(10, 20)
// LIMIT 10 OFFSET 20 注意跟 SQL 反过来的

删除数据

beedb 提供了丰富的删除数据接口,请看下面的例子

例子 1,删除单条数据


o := orm.NewOrm()
if num, err := o.Delete(&User{Id: 1}); err == nil {
    fmt.Println(num)
}

Delete 操作会对反向关系进行操作,此例中 Post 拥有一个到 User 的外键。删除 User 的时候。如果 on_delete 设置为默认的级联操作,将删除对应的 Post

推荐阅读更多精彩内容