更新数据
继续上面的例子来演示更新操作,现在 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:
例子 3,WHERE IN 查询条件:
例子 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